Aline Lozano Postado Setembro 6, 2011 Denunciar Share Postado Setembro 6, 2011 Boa tarde,preciso de uma ajuda.Como faço para criar um procedimento que garanta que a alteração de CPF na TBCliente também seja realizado na TBVenda; TBClienteCPF, Nome, SenhaTBVendaCodVendam CPF, CodProduto, DataVenda, Qtd, Total, NumCartaoobrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Setembro 6, 2011 Denunciar Share Postado Setembro 6, 2011 Boa tarde Aline, A alteração poderá ser realizada utilizando dois updates: um na tabela TBCliente e outro na TBVenda. Mas para garantir a alteração, os dois updates devem estar contidos em uma única transação. Sendo assim, caso dê erro na alteração de algumas das tabelas, o processo é abortado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aline Lozano Postado Setembro 6, 2011 Autor Denunciar Share Postado Setembro 6, 2011 Mas para isso tenho que fazer um 'CREATE PROCEDURE'....fiz conforme abaixo, mas não sei vincular as duas tabelas.CREATE PROCEDURE UPDATE_TBCliente ( CPF VARCHAR(15), NOME VARCHAR (100), SENHA BINARY (255)) AS BEGIN IF (EXISTS(SELECT CPF FROM TBCliente WHERE (CPF = :CPF))) THEN UPDATE TBCliente SET NOME = :NOME, SENHA = :SENHA, WHERE (CPF = :CPF); ELSE INSERT INTO TBCliente ( CPF, NOME, SENHA) VALUES ( :CPF, :NOME, :SENHA); END Esqueci de mencionar. Tenho 3 bancos e uma tabela para cada: CREATE DATABASE DBCliente CREATE TABLE TBCliente CREATE DATABASE DBVenda CREATE TABLE TBVenda CREATE DATABASE DBProduto CREATE TABLE TBProduto Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Setembro 8, 2011 Denunciar Share Postado Setembro 8, 2011 Bom dia Aline, A sua sintaxe está bem diferente.... está parecendo mais PL sql..... rs. Mas vamos lá: - alterei a sintaxe da procedure. - Caso os BD´s estejam em um mesmo servidor, tem como fazer a chamada direta a eles. No exemplo que fiz, os BD´s tem q estar no mesmo Servidor. - Se os BD´s não estiverem no mesmo Servidor, terá que criar um Linked Server para acessar as tabelas. - Criei o TRY / CATCH para o controle de erro (se o seu sql for 2000, não conseguirá executar. Somente 2005 ou superior). - Criei a transação TRAN para o bloco de execução. Caso alguma manipulação dê erro, haverá o ROLLBACK da transação (o sql irá desfazer). - Se não houver nenhum erro, no final do script terá o COMMIT, onde será confirmada a execução da transação. OBS.: o comando TRY / CATCH "esconde" o erro ocorrido. Sendo assim, caso queira mostrar ao usuário (por exemplo) que ocorreu um erro na execução, você terá que colocar alguma mensagem de tratamento (no Catch).CREATE PROCEDURE UPDATE_TBCliente @CPF VARCHAR(15), @NOME VARCHAR (100), @SENHA BINARY (255) AS BEGIN BEGIN TRY IF (EXISTS(SELECT CPF FROM TBCliente WHERE (CPF = @CPF))) BEGIN BEGIN TRAN USE DBCliente UPDATE TBCliente SET NOME = @NOME, SENHA = @SENHA WHERE (CPF = C@PF) USE DBVenda UPDATE TBVenda SET NOME = @NOME, SENHA = @SENHA WHERE (CPF = C@PF) USE DBProduto UPDATE TBProduto SET NOME = @NOME, SENHA = @SENHA WHERE (CPF = C@PF) END ELSE BEGIN INSERT INTO TBCliente (CPF, NOME, SENHA) VALUES (@CPF, @NOME, @SENHA) END COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH END Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aline Lozano Postado Setembro 8, 2011 Autor Denunciar Share Postado Setembro 8, 2011 Obrigada. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Aline Lozano
Boa tarde,
preciso de uma ajuda.
Como faço para criar um procedimento que garanta que a alteração de CPF na TBCliente também seja realizado na TBVenda;
TBCliente
CPF, Nome, Senha
TBVenda
CodVendam CPF, CodProduto, DataVenda, Qtd, Total, NumCartao
obrigada.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.