DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Leandro Ribeiro
 

País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 1
 Postado em: 30/6/2011 10:07:08 AM

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
Marco Pinheiro
 
 


País: Brasil
Estado: MG
Cidade: Belo Horizonte
Mensagens: 110
 Postado em: 10/7/2011 3:28:08 PM
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.

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 921
 Postado em: 30/11/2011 11:50:22 AM
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

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03