MERGE Komutu Kullanımı

  1. Kaynak tabloda olup hedef tabloda olmayan verileri insert etmek,
  2. Kaynak tabloda olup hedef tabloda da olan verileri olması muhtemel değişiklikleri uygulamak için update etmek,
  3. Hedef tabloda olup artık kaynak tabloda bulunmayan kayıtları delete etmek.

Insert, delete ve update yapılan kayıtların dbo.test tablosuna insert edilmesi yapılmaktadır.

IF OBJECT_ID( ‘dbo.EmployeeSource’) IS NOT NULL DROP TABLE dbo.EmployeeSource;
IF OBJECT_ID( ‘dbo.EmployeeTarget’) IS NOT NULL DROP TABLE dbo.EmployeeTarget;

CREATE TABLE EmployeeSource
(
EmployeeID int,
FirstName nvarchar(50),
LastName nvarchar(50),
Title nvarchar(100),
RecruitmentDate datetime,
Salary decimal,
IsActive bit
)
GO

CREATE TABLE EmployeeTarget
(
EmployeeID int,
FirstName nvarchar(50),
LastName nvarchar(50),
Title nvarchar(100),
RecruitmentDate datetime,
Salary decimal,
IsActive bit
)
GO

INSERT INTO dbo.EmployeeTarget
VALUES
(1, N’Abdullah’, N’Altıntaş’, N’Takım Lideri’, ‘20120721’, 1000, 1),
(2, N’İsmail’, N’Adar’, N’DBA’, ‘20090101’, 1500, 1),
(3, N’Yusuf’, N’Boğatepe’, N’Danışman’, ‘20140103’, 1000, 1),
(4, N’Merve’, N’Sağlam’, N’Kıdemli Danışman’, ‘20150618’, 1800, 1)
GO

INSERT INTO dbo.EmployeeSource
VALUES
(1, N’Abdullah’, N’Altıntaş’, N’Takım Lideri’, ‘20120721’, 2000, 1),
(2, N’İsmail’, N’Adar’, N’DBA’, ‘20090101’, 1500, 1),
(3, N’Yusuf’, N’Boğatepe’, N’Danışman’, ‘20140103’, 1000, 1),
(5, N’Şeydanur’, N’Sandıkçı’, N’Danışman’, GETDATE(), 1000, 0)
GO

IF OBJECT_ID( ‘dbo.Test’) IS NOT NULL DROP TABLE dbo.Test;
CREATE TABLE dbo.Test (Id INT IDENTITY,YapilanIslemler VARCHAR(100),deleted_EmployeeID INT NULL,inserted_EmployeeID INT NULL, CreateDate DATETIME)

MERGE INTO dbo.EmployeeTarget as t
USING dbo.EmployeeSource as s
ON t.EmployeeID = s.EmployeeID
WHEN MATCHED THEN

UPDATE SET t.FirstName = s.FirstName, UPDATE SET t.FirstName = s.FirstName,  t.LastName = s.LastName,  t.Title = s.Title,  t.RecruitmentDate = s.RecruitmentDate, t.Salary = s.Salary, t.IsActive = s.IsActive

WHEN NOT MATCHED BY TARGET THEN — Hedef tablosunda olmayanları kaynak tablosundan hedef tablosuna insert etmek

INSERT (EmployeeID, FirstName, LastName, Title, RecruitmentDate, Salary, IsActive)INSERT (EmployeeID, FirstName, LastName, Title, RecruitmentDate, Salary, IsActive) VALUES (s.EmployeeID, s.FirstName, s.LastName, s.Title, s.RecruitmentDate, s.Salary, s.IsActive)

WHEN NOT MATCHED BY SOURCE THEN — hedef tablosunda olup kaynak tablosunda olmayan kayıtları silmek

DELETE

OUTPUT $action as YapilanIslemler, deleted.EmployeeID , inserted.EmployeeID,GETDATE() INTO Test;

SELECT * FROM dbo.EmployeeSourceSELECT * FROM dbo.EmployeeSourceSELECT * FROM dbo.EmployeeTargetSELECT * FROM dbo.Test

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s