Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Stored Procedures para atualizar 'id' de dois banc


Aline Lozano

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...