Atualizando várias tabelas
30/06/2011
0
Bom dia,
Tudo bem? Estou com um pequeno problema do qual preciso de uma solução o mais breve possível.
Tenho um código de recurso que é vinculado a um procedimento, preciso alterar o codigo de determinado procedimento porém são várias tabelas do qual o mesmo esta inserido e vinculado, sendo que ele é chave primária em mais de uma tabela. Ja tentei usar procedure e cursores porém em vão... sempre da uma mensagem de erro de CONSTRAINT.
Alguem tem alguma solução do que pode ser feito?
USE [XXX]
GO
/****** Object: StoredProcedure [dbo].[codatualiza] Script Date: 06/29/2011 15:52:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[codatualiza]
as begin
declare @cod_recurso int
set @cod_recurso = '2839' <-- (preciso atualizar o procedimento 40305015 que atualmente possui o codigo 1856 para o codigo 2839... vale deixar uma ressalva que a regra aqui é um codigo pode ter vários procedimentos )
declare ccod cursor for
SELECT 1 FROM syscolumns WHERE name = 'cod_recurso'
or name = 'rcocodprocedimento' and xtype = 'U'
--or name = cast('tb_ficha_clinica' as nvarchar)
--AND type = 'U'
begin transaction
--select @cod_recurso
--from tb_recurso a, cadtblrcorecursocodigo c
--where a.cod_recurso = c.cod_recurso and
--c.rcocodprocedimento = 40305015 and a.
--cod_recurso = @cod_recurso
--print N'O Codigo atual para o procedimento 40305015 :' + cast(@cod_recurso as varchar(255))
open ccod
--while 1 = 1
while @@fetch_status = 0
begin
fetch next from ccod into @cod_recurso
if @@fetch_status <> 0 begin
break
UPDATE cadtblrcorecursocodigo
--print @cnes
--print @cnpj
set cod_recurso = @cod_recurso
where rcocodprocedimento = '40305015'
UPDATE fattblprsprocedsip
set cod_recurso = @cod_recurso
where rcocodprocedimento = '40305015'
UPDATE tb_ficha_clinica
set cod_recurso = @cod_recurso
where rcocodprocedimento = '40305015'
end
end
--print @cod_recurso
close ccod
deallocate ccod
end
Ai esta algumas tentativas sem sucesso que eu fiz!
Estou no aguardo de alguma ajuda!
Obrigado
Leandro Ribeiro
Curtir tópico
+ 0
Responder
Posts
10/07/2011
Marco Pinheiro
Pelo que entendi vc quer fazer um DE-PARA. É isso?
Se for, realmente é um processo mais chato, mas não impossivel.
Primeiramente vc deve encontrar todas as referencias de chaves. Use a sysforeignkeys, pode te ajudar.
Você sabendo quais são as relações fica mais fácil fazer as alterações.
Como teste vc pode desabilitar suas constraints, realizar as alterações e depois reabilitar usando o comando CHECK CHECK. Daí verá se ficou alguma inconsistencia.
Att.,
Marco.
Responder
30/11/2011
Emerson Nascimento
um ponto a ser observado: o novo recurso atribuido DEVE estar criado previamente.
e como você sabe quais tabelas devem ser manipuladas, faça somente:
ALTER procedure [dbo].[codatualiza] (@procedimento varchar(8), @novo_recurso int)
as begin
begin transaction
UPDATE cadtblrcorecursocodigo set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
UPDATE fattblprsprocedsip set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
UPDATE tb_ficha_clinica set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
end
end
e como você sabe quais tabelas devem ser manipuladas, faça somente:
ALTER procedure [dbo].[codatualiza] (@procedimento varchar(8), @novo_recurso int)
as begin
begin transaction
UPDATE cadtblrcorecursocodigo set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
UPDATE fattblprsprocedsip set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
UPDATE tb_ficha_clinica set cod_recurso = @novo_recurso where rcocodprocedimento = @procedimento
end
end
Responder
Clique aqui para fazer login e interagir na Comunidade :)