Atualizando várias tabelas

30/06/2011

0

SQL

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

Leandro Ribeiro

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar