Usuário com melhor resposta
Verifcar se existe o registro

Pergunta
-
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
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta SirSmart quarta-feira, 27 de fevereiro de 2019 15:28
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
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta SirSmart quarta-feira, 27 de fevereiro de 2019 15:28
-
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]