none
Verifcar se existe o registro RRS feed

  • Pergunta

  • Galera preciso verificar se o registro existe, se sim , eu dou um update se não eu dou um insert. 

    Como posso fazer isso ?

    Obrigado


    SirSmart

    quarta-feira, 27 de fevereiro de 2019 15:07

Respostas

Todas as Respostas

  • Bom dia,

    Para esse caso acredito que seja interessante o uso do comando Merge:

    https://docs.microsoft.com/pt-br/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta SirSmart quarta-feira, 27 de fevereiro de 2019 15:28
    quarta-feira, 27 de fevereiro de 2019 15:11
  • SirSmart,

    Acredito também que uma possibilidade mais prática seja o uso do comando Merge, mas em alguns cenários, o operador IF pode ser uma solução, bem como, o uso de Triggers.

    Veja estes exemplos:

    CREATE TABLE Pessoas(Id INT PRIMARY KEY IDENTITY, Nome NVARCHAR(100) NOT NULL)
    GO
    
    CREATE TABLE PessoasHistorico(Id INT NOT NULL,Nome VARCHAR(50) NOT NULL,Data SMALLDATETIME NOT NULL DEFAULT GETDATE(),Situacao VARCHAR(12) NOT NULL)
    go
    
    INSERT INTO Pessoas (Nome) VALUES('Marcela Leal')
    INSERT INTO Pessoas (Nome) VALUES('Tiago Péricles Guimarães')
    INSERT INTO Pessoas (Nome) VALUES('Rodrigo Costa')
    INSERT INTO Pessoas (Nome) VALUES('Fernanda Lima')
    INSERT INTO Pessoas (Nome) VALUES('Helena Silva')
    INSERT INTO Pessoas (Nome) VALUES('Raimundo Nonato')
    INSERT INTO Pessoas (Nome) VALUES('Virgínia Costa dos Santos')
    INSERT INTO Pessoas (Nome) VALUES('Mário Souza Andrade')
    GO
    
    
    ALTER TABLE Pessoas ADD Data SMALLDATETIME NOT NULL DEFAULT GETDATE()
    go
    
    MERGE PessoasHistorico AS PH
    USING Pessoas AS P ON P.Id = PH.Id
    WHEN NOT MATCHED BY TARGET THEN
    INSERT ([Id], [Nome], [Data], [Situacao])
    VALUES (Id, Nome, Data, 'Inserido')
    WHEN NOT MATCHED BY SOURCE THEN
    UPDATE SET PH.Situacao = 'Apagado', PH.Data = GETDATE();
    go
    
    select * from Pessoas
    select * from PessoasHistorico
    

    Create Table Loja1
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Loja2
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Lojas
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 1')
    Go 20
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 2')
    Go 15
    
    Merge Lojas Destino
    Using Loja1 Origem
    On Origem.Codigo = Destino.Codigo
    When Not Matched Then
     Insert Values(CodProduto, Descricao)
    When Matched Then
     Update Set Destino.Codigo = Origem.Codigo;
    
    Merge Lojas Destino
    Using Loja2 Origem
    On Origem.Codigo = Destino.Codigo
    When Matched Then
     Update Set Destino.Descricao = 'Em ambas as lojas'
    When Not Matched Then
     Insert Values (CodProduto, Descricao);

    CREATE TRIGGER MyTrigger ON dbo.MyTable
    AFTER INSERT
    AS
    
    if exists ( select * from table t 
        inner join inserted i on i.name=t.name and i.date=t.date)
    begin
        rollback
        RAISERROR ('Duplicate Data', 16, 1);
    end
    go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 27 de fevereiro de 2019 17:08