Aracılığıyla paylaş


Ekleme, güncelleştirme ve mektup birleştirme kullanarak veri silme

De SQL Server 2008, tek bir INSERT, update veya delete işlemleri gerçekleştirebilir deyim birleştirme kullanarak deyim.BİRLEŞTİRME deyim , hedef tablo veya Görünüm veri kaynağıyla katılmak ve daha sonra bu birleştirmek sonuçlarına dayalı hedef karşı birden fazla eylem gerçekleştirmek verir. Örneğin, mektup birleştirmek kullanabilirsiniz deyim aşağıdaki işlemleri gerçekleştirmek için:

  • Koşullu olarak veya bir hedef satır tablo.

    Hedef satır varsa, tablo, bir veya daha fazla sütun; Güncelleştir Aksi durumda, verileri yeni bir satıra yerleştirin.

  • İki tablo eşitleyin.

    Ekleme, güncelleştirme veya hedef satır silmek tablo kaynak verilerle farklılıkları temel.

BİRLEŞTİRME sözdizimi beş birincil yan tümceleri oluşur:

  • Birleştirme yan tümce tümce tümce tablo veya görünümü Ekle hedef belirtir, güncelleştirme veya silme işlemleri.

  • Veriyi kullanma yan tümce tümce tümcende belirtir kaynak ile hedef etki alanına.

  • on yan tümce tümce tümce, hedef ve kaynak burada eşleşen belirlemek birleştirmek koşullarını belirtir.

  • OLDUĞUNDA yan tümce tümce tümceleri (eşleşen değil eşleşen tarafından hedef ve değil eşleşen tarafından kaynak zamanı), temel alarak gerçekleştirilecek eylemleri belirtmek sonuçlar on yan tümce tümce tümce ve OLDUĞUNDA yan tümce tümce tümcelerini belirtilen herhangi bir ek arama ölçütleri.

  • output yan tümce tümce tümce eklendiğinde, silinmiş veya güncelleştirildiğinde, hedef her satır için bir satır döndürür.

Sözdizimi ve kuralları ile ilgili tüm ayrıntılar için bkz: BİRLEŞTİRME (Transact-sql).

Kaynak ve hedef arama koşullarını belirtme

Kaynak ve hedef veri tek bir giriş akışı nasıl birleştirilir anlamak ve ek arama ölçütleri için doğru kullanılabilir nasıl gereksiz satırları süzmek önemlidir.Aksi takdirde, yanlış sonuçlar üreten bir şekilde ek arama ölçütleri belirtebilir.

Kaynak satır satır birleştirmek yüklemi on yan tümce tümce tümcesinde belirtilen temel hedef ile eşleştirilir.Bir birleşik giriş akışı sonucudur.Giriş satır bir INSERT, update veya delete işlemi gerçekleştirilir.Belirtilen OLDUĞUNDA yan tümceleri bağlı deyim, giriş satır aşağıdakilerden herhangi biri olabilir:

  • Hedef satırı ve'nden oluşan bir eşleşen çifti kaynak.when sonucudur matched yan tümce tümce tümce.

  • Bir satırdan kaynak hedef, karşılık gelen bir satır vardır.when sonucudur değil hedef ile eşleşen yan tümce tümce tümce.

  • Bir satır karşılık gelen bir satır kaynak olan hedef.when sonucudur değil kaynak tarafından eşleşen yan tümce tümce tümce.

OLDUĞUNDA yan tümceleri birleştirmek işlemine belirtilen bileşimi deyim sorgu işlemcisi tarafından gerçekleştirilir ve elde edilen giriş akışı etkiler birleştirmek türünü belirler.Göstermek için aşağıdaki örnek kaynak ve hedef tabloları ve veri düşünün.

USE tempdb;
GO
CREATE TABLE dbo.Target(EmployeeID int, EmployeeName varchar(10), 
     CONSTRAINT Target_PK PRIMARY KEY(EmployeeID));
CREATE TABLE dbo.Source(EmployeeID int, EmployeeName varchar(10), 
     CONSTRAINT Source_PK PRIMARY KEY(EmployeeID));
GO
INSERT dbo.Target(EmployeeID, EmployeeName) VALUES(100, 'Mary');
INSERT dbo.Target(EmployeeID, EmployeeName) VALUES(101, 'Sara');
INSERT dbo.Target(EmployeeID, EmployeeName) VALUES(102, 'Stefano');

GO
INSERT dbo.Source(EmployeeID, EmployeeName) Values(103, 'Bob');
INSERT dbo.Source(EmployeeID, EmployeeName) Values(104, 'Steve');
GO

Aşağıdaki tablo olası birleştirmek türlerini listeler ve her tür sorgu en iyi duruma getiricisi tarafından ne zaman uygulanır gösterir.Kaynak ve hedef veri eşleştirme için arama ölçütlerini olduğunda tablo da Örneğin giriş akışı elde edilen kaynak ve hedef tabloları gösterir Source.EmployeeID = Target.EmployeeID.

Birleştirme türü

Uygulama

Örnek giriş akışı sonuçlar

İÇ BİRLEŞİM

OLDUĞUNDA matched yan tümce tümce tümce yalnızca belirtilen OLDUĞUNDA yan tümce tümce tümce olur.

SrcEmpID SrcName TrgEmpID TrgName

-------- ------- -------- -------

NULL     NULL    NULL     NULL

SOL DIŞ BİRLEŞTİRME

Ne zaman değil hedef ile eşleşen yan tümce tümce tümce OLDUĞUNDA belirtilen değil kaynak tarafından eşleşen yan tümce tümce tümce belirtilen.OLDUĞUNDA matched belirtilmiş olabilir veya olmayabilir.

SrcEmpID SrcName TrgEmpID TrgName

-------- ------- -------- -------100      Mary    NULL     NULL

101      Sara    NULL     NULL

102      Stefano NULL     NULL

SAĞ DIŞ BİRLEŞİM

OLDUĞUNDA matched yan tümce tümce tümce ve ne zaman değil kaynak tarafından eşleşen yan tümce tümce tümce belirtilirse, ancak ne zaman by eşleşen hedef yan tümce tümce belirtilen.

SrcEmpID SrcName TrgEmpID TrgName

-------- ------- -------- -------NULL     NULL    103      Bob

NULL     NULL    104      Steve

TAM DIŞ BİRLEŞİM

Ne zaman değil hedef ile eşleşen yan tümce tümce tümce ve OLDUĞUNDA değil kaynak tarafından eşleşen yan tümce tümce tümce belirtilirse.OLDUĞUNDA matched belirtilmiş olabilir veya olmayabilir.

SrcEmpID SrcName TrgEmpID TrgName

-------- ------- -------- -------100      Mary    NULL     NULL

101      Sara    NULL     NULL

102      Stefano NULL     NULL

NULL     NULL    103      Bob

NULL     NULL    104      Steve

ANTI NOKTALI KATIL

Ne zaman değil kaynak tarafından eşleşen yan tümce tümce tümce yalnızca belirtilen OLDUĞUNDA yan tümce tümce tümce olur.

TrgEmpID TrgName

-------- -------

100      Mary

101      Sara

102      Stefano

Örnek giriş akışı sonuçları giriş akışı sonuçlar üzerinde OLDUĞUNDA yan tümceleri birleşimi bağlıdır gösterir.Şimdi o giriş akışı üzerinde temel hedef tablo üzerinde aşağıdaki eylemleri gerçekleştirmek istediğinizi varsayalım:

  • Çalışan kimliği mevcut değil hedef tablo ve kaynak çalışan adı ile başlatıldığında kaynak tablosundan satır eklemek 's'.

  • Hedef satır silmek tablo başladığında hedef çalışan adı ile 's' ve çalışan kimliği kaynağında yok tablo.

Bu eylemleri gerçekleştirmek için aşağıdaki OLDUĞUNDA yan tümceleri gereklidir:

  • EŞLEŞEN HEDEF TARAFINDAN DEĞİL, DAHA SONRA EKLE

  • KAYNAK TARAFINDAN EŞLEŞEN DEĞİL, SONRA SİL

Altında açıklandığı gibi tablo, ne zaman her ikisi de yan tümceleri eşleşen zaman belirtilirse, sonuç giriş akışı olan bir tam dış birleştirmek kaynak ve hedef tablos.Giriş akışı sonuçlar bilinen artık, INSERT, update ve delete eylemleri için giriş akışı nasıl uygulanacağını göz önünde bulundurun.

Daha önce belirtildiği gibi yapılması gereken işlemler OLDUĞUNDA yan tümce tümce tümceleri belirtin temel sonuçlar on yan tümce tümce tümce ve OLDUĞUNDA yan tümce tümce tümcelerini belirtilen herhangi bir ek arama ölçütleri.Çoğu durumda, gerekli giriş akışı on yan tümce tümce tümcesinde belirtilen arama koşullarını oluşturur.Ancak, etkilenen satırların başlayan bir çalışan adı olmayan sınırlamak için ek filtre uygulama örnek senaryoda, INSERT ve delete eylemleri gerektirir 's'.Aşağıdaki örnekte, zaman filtre koşulları uygulanır değil eşleşen tarafından hedef ve ne zaman değil eşleşen tarafından kaynak.deyim çıktısı giriş akışı'den beklenen satırlar düzeltildi, eklenen veya silinen olduğunu gösterir.

-- MERGE statement with the join conditions specified correctly.
USE tempdb;
GO
BEGIN TRAN;
MERGE Target AS T
USING Source AS S
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName)
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%'
    THEN DELETE 
OUTPUT $action, inserted.*, deleted.*;
ROLLBACK TRAN;
GO 

output yan tümce tümce tümce sonuçlar burada bulunmaktadır.

$action   EmployeeID  EmployeeName EmployeeID  EmployeeName

--------- ----------- ------------ ----------- ------------

DELETE    NULL        NULL         101         Sara

DELETE    NULL        NULL         102         Stefano

INSERT    104         Steve        NULL        NULL

(3 row(s) affected)

on yan tümce tümce tümce için ek bir arama koşulu belirterek işlemin ilk aşamalarında giriş akışı satır sayısını azaltmayı (örneğin, belirterek ON Source.EmployeeID = Target.EmployeeID AND EmployeeName LIKE 'S%'). sorgu performansını artırmak için görünebilirAncak, bunu yaparsanız bu nedenle beklenmedik ve yanlış neden olabilir sonuçlar.Kaynak ve hedef veri eşleştirme için on yan tümce tümce tümcesinde belirtilen ek arama koşulları kullanılır çünkü bunlar misapplied.

Aşağıdaki örnekte gösterilmiştir nasıl yanlış sonuçlar ortaya çıkabilir.Kaynak ve hedef tabloları ve süzme satırları için ek bir arama koşulu eşleştirmek için arama koşulu her ikisi de belirtilmiş on yan tümce tümce tümcesini.Çünkü ek arama koşulu olan kaynak ve hedef ile eşleşen belirlemek için gerekli değil, INSERT ve delete eylemleri tüm satırlara uygulanır.Etkin filtreleme koşul EmployeeName LIKE 'S%' göz ardı edilir.Ne zaman deyim çalıştırıldığında, çıkışını inserted ve deleted tabloları gösterir iki satır yanlış değişiklik: Mary tarafından silinmiş yanlış hedef tablo ve Bob yanlış eklenir.

-- MERGE statement with join conditions that produce unexpected results.
USE tempdb;
GO
BEGIN TRAN;
MERGE Target AS T
USING Source AS S
ON (T.EmployeeID = S.EmployeeID AND T.EmployeeName LIKE 'S%' 
    AND S.EmployeeName LIKE 'S%' )
WHEN NOT MATCHED BY TARGET
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName)
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName
WHEN NOT MATCHED BY SOURCE
    THEN DELETE
OUTPUT $action, Inserted.*, Deleted.*;
ROLLBACK TRAN;
GO

output yan tümce tümce tümce sonuçlar burada bulunmaktadır.

$action   EmployeeID  EmployeeName EmployeeID  EmployeeName

--------- ----------- ------------ ----------- ------------

DELETE    NULL        NULL         100         Mary

DELETE    NULL        NULL         101         Sara

DELETE    NULL        NULL         102         Stefano

INSERT    103         Bob          NULL        NULL

INSERT    104         Steve        NULL        NULL

(5 satırları etkilenen)

Arama koşulu yönergeleri

Arama koşullarını kaynak ve hedef satır eşleştirmek için kullanılan ek bir arama koşulu ya da kaynak satırları süzmek için kullanılan ya da hedef doğru sonuçlar elde emin olmak için doğru şekilde belirtilmelidir.Bu yönergeleri öneririz:

  • Yalnızca arama koşullarına belirtmek ON <merge_search_condition> yan tümce tümce tümcesinin eşleşen veri kaynak ve hedef tabloları ölçütlerini belirlemekDiğer bir deyişle, yalnızca hedef sütunları belirtmek tablo için karşılık gelen sütunları kaynak karşılaştırıldığında tablo.

  • Sabit gibi diğer değerlere karşılaştırmaları dahil.

Kaynak veya hedef tablolardan satırları dışarı filtre uygulamak için aşağıdaki yöntemlerden birini kullanın:

  • Uygun OLDUĞUNDA yan tümce tümce tümcesindeki filtre satır için arama koşulu belirleyin.Örneğin, WHEN NOT MATCHED AND S.EmployeeName LIKE 'S%' THEN INSERT....

  • Kaynak veya hedef tablo görünüme başvuran ve kaynak veya hedef Süzülen satırları döndüren bir görünüm tanımlayın.Görünümün hedef tablo üzerinde tanımlı ise, herhangi bir eylem karşısında görünümlerini güncelleştirmek için koşullar uygun olmalıdır.Bir görünümünü kullanarak veri güncelleştirme hakkında daha fazla bilgi için bkz: Bir görünüm üzerinden veri değiştirme.

  • WITH kullanma <ortak tablo ifade> için kaynak veya hedef tablo. satır filtre yan tümce tümce tümceBu yöntem on yan tümce tümce tümcesinde ek arama ölçütleri belirtmek için benzer ve yanlış sonuçlar doğurabilir.Bu yöntem kullanmaktan kaçının veya uygulamadan önce sınamanız önerilir.

Örnekler

A.Basit bir mektup birleştirme kullanarak deyim Ekle ve güncelleştir işlemleri için

Varsayalım elinizde bir FactBuyingHabits tablo veri ambarı ambar veri ambarıtabanı her müşterinin son tarih izleyen belirli bir ürün satın.İkinci bir tablo satın, bir oltp veritabanı kayıtları sırasında verilen bir hafta satın.Satırları belirli müşterileri hiçbir zaman önce gelen satın ürünleri eklemek istediğiniz her hafta satın için tablo FactBuyingHabits tablosu.Bunlar zaten satın önce satırları ürünleri satın alan müşteriler için basitçe satın alma tarihini güncelleştirmek istediğiniz FactBuyingHabits tablo.Bu ekleme ve güncelleştirme işlemlerini tek bir gerçekleştirilmesi deyim birleştirme kullanarak.

Aşağıdaki örnek, ilk tablo oluşturur Purchases ve FactBuyingHabits ve yükler onlarla bazı örnek veri.Kümelenmiş dizin PRIMARY anahtar kısıtlaması oluşturarak oluşturulacak şekilde benzersiz dizinleri birleştirmek anahtar oluşturulduğunda birleştirmek deyimleri performansı artırır ProductID sütun her iki tabloda bulunan.

In this example, Purchases contains purchases for the week of August 21, 2006.FactBuyingHabits contains purchases for the prior week; ordinarily this table would be populated with rows dating back much earlier.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'dbo.Purchases', N'U') IS NOT NULL 
    DROP TABLE dbo.Purchases;
GO
CREATE TABLE dbo.Purchases (
    ProductID int, CustomerID int, PurchaseDate datetime, 
    CONSTRAINT PK_PurchProdID PRIMARY KEY(ProductID,CustomerID));
GO
INSERT INTO dbo.Purchases VALUES(707, 11794, '20060821'),
(707, 15160, '20060825'),(708, 18529, '20060821'),
(711, 11794, '20060821'),(711, 19585, '20060822'),
(712, 14680, '20060825'),(712, 21524, '20060825'),
(712, 19072, '20060821'),(870, 15160, '20060823'),
(870, 11927, '20060824'),(870, 18749, '20060825');
GO
IF OBJECT_ID (N'dbo.FactBuyingHabits', N'U') IS NOT NULL 
    DROP TABLE dbo.FactBuyingHabits;
GO
CREATE TABLE dbo.FactBuyingHabits (
    ProductID int, CustomerID int, LastPurchaseDate datetime, 
    CONSTRAINT PK_FactProdID PRIMARY KEY(ProductID,CustomerID));
GO
INSERT INTO dbo.FactBuyingHabits VALUES(707, 11794, '20060814'),
(707, 18178, '20060818'),(864, 14114, '20060818'),
(866, 13350, '20060818'),(866, 20201, '20060815'),
(867, 20201, '20060814'),(869, 19893, '20060815'),
(870, 17151, '20060818'),(870, 15160, '20060817'),
(871, 21717, '20060817'),(871, 21163, '20060815'),
(871, 13350, '20060815'),(873, 23381, '20060815');
GO

Tablo şimdi aşağıdaki verilerle doldurulur:

dbo.Satınalmalar

ProductID   CustomerID  PurchaseDate

----------- ----------- -----------------------

707         11794       2006-08-20 00:00:00.000

707         15160       2006-08-25 00:00:00.000

708         18529       2006-08-21 00:00:00.000

711         11794       2006-08-20 00:00:00.000

711         19585       2006-08-22 00:00:00.000

712         14680       2006-08-26 00:00:00.000

712         21524       2006-08-26 00:00:00.000

712         19072       2006-08-20 00:00:00.000

870         15160       2006-08-23 00:00:00.000

870         11927       2006-08-24 00:00:00.000

870         18749       2006-08-25 00:00:00.000

dbo.FactBuyingHabits

ProductID   CustomerID  LastPurchaseDate

----------- ----------- -----------------------

707         11794       2006-08-14 00:00:00.000

707         18178       2006-08-18 00:00:00.000

864         14114       2006-08-18 00:00:00.000

866         13350       2006-08-18 00:00:00.000

866         20201       2006-08-15 00:00:00.000

867         20201       2006-08-14 00:00:00.000

869         19893       2006-08-15 00:00:00.000

870         17151       2006-08-18 00:00:00.000

870         15160       2006-08-17 00:00:00.000

871         21717       2006-08-17 00:00:00.000

871         21163       2006-08-15 00:00:00.000

871         13350       2006-08-15 00:00:00.000

873         23381       2006-08-15 00:00:00.000

Orada iki ürün-müşteri satır iki tabloda ortak unutmayın: Müşteri 11794 ürün 707 önceki hafta yanı sıra, geçerli hafta sırasında satın alınan ve aynı ürün 870 müşteri 15160'ın satın alınmasını geçerlidir.Bu satırlar için güncelleştiriyoruz FactBuyingHabits bu Satınalmalar için kayıt tarih ile satın ne zaman kullanarak yan tümce tümce tümce sonra EŞLEŞTİ.Biz diğer tüm satırlar eklemek FactBuyingHabits kullanarak when then yan tümce tümce tümcesinin eşleşen değil.

MERGE dbo.FactBuyingHabits AS Target
USING (SELECT CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source
ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID)
WHEN MATCHED THEN
    UPDATE SET Target.LastPurchaseDate = Source.PurchaseDate
WHEN NOT MATCHED BY TARGET THEN
    INSERT (CustomerID, ProductID, LastPurchaseDate)
    VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate)
OUTPUT $action, Inserted.*, Deleted.*; 

B.GÜNCELLEŞTİRME ve silme işlemlerini gerçekleştirme

Güncelleştirmek için aşağıdaki örnek birleştirme kullanır ProductInventory , tablo AdventureWorks2008R2 örnek veritabanı günlük, işlenir siparişlerine göre SalesOrderDetail tablosu.Aşağıdaki birleştirme kullanarak deyim, Quantity sütunu ProductInventory Tablo sayısı her gün için yerleştirilen çıkarılarak tarafından güncelleştirilirher ürün. Bir ürün için sipariş sayısını 0 olarak bırakın veya aşağıda ürünün stok neden olursa bu ürünün satır silinir ProductInventory tablo.Kaynak tablo üzerinde toplanan Not ProductID sütun.Bu yapılmadı, birden fazla ProductID Kaynak tablo hedef tablo ile eşleşmesi ve birleştirme neden deyim bir hata dönmek için

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'Production.usp_UpdateInventory', N'P') IS NOT NULL DROP PROCEDURE Production.usp_UpdateInventory;
GO
CREATE PROCEDURE Production.usp_UpdateInventory
    @OrderDate datetime
AS
MERGE Production.ProductInventory AS target
USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod
    JOIN Sales.SalesOrderHeader AS soh
    ON sod.SalesOrderID = soh.SalesOrderID
    AND soh.OrderDate = @OrderDate
    GROUP BY ProductID) AS source (ProductID, OrderQty)
ON (target.ProductID = source.ProductID)
WHEN MATCHED AND target.Quantity - source.OrderQty <= 0
    THEN DELETE
WHEN MATCHED 
    THEN UPDATE SET target.Quantity = target.Quantity - source.OrderQty, 
                    target.ModifiedDate = GETDATE()
OUTPUT $action, Inserted.ProductID, Inserted.Quantity, Inserted.ModifiedDate, Deleted.ProductID,
    Deleted.Quantity, Deleted.ModifiedDate;
GO

EXECUTE Production.usp_UpdateInventory '20030501'

C.INSERT, update ve delete işlemleri gerçekleştirme

Aşağıdaki örnek, eklemek, güncelleştirmek veya bir hedef satır silmek için kullanır birleştirme tablo kaynak verilerle farklılıkları temel.Her bir departman ile beş departmanları olan küçük bir şirket Yöneticisi düşünün.Şirketin kendi departmanları re-organize karar verir.Re-organization uygulamak için hedef tablo dbo olur.Departmanlar, birleştirme deyim aşağıdaki değişiklikleri uygulamak gerekir:

  • Bazı varolan departmanları değişmez.

  • Bazı varolan departmanları yeni yöneticileri sahip olacaktır.

  • Yeni oluşturulan bazı bölümler.

  • Bazı bölümleri, sonra yeniden düzenlemeye yer alır.

Aşağıdaki kod, hedef tablo oluşturur dbo.Departments ve yöneticileri ile doldurur

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'dbo.Departments', N'U') IS NOT NULL 
    DROP TABLE dbo.Departments;
GO
CREATE TABLE dbo.Departments (DeptID tinyint NOT NULL PRIMARY KEY, DeptName nvarchar(30), 
    Manager nvarchar(50));
GO
INSERT INTO dbo.Departments 
    VALUES (1, 'Human Resources', 'Margheim'),(2, 'Sales', 'Byham'), 
           (3, 'Finance', 'Gill'),(4, 'Purchasing', 'Barber'),
           (5, 'Manufacturing', 'Brewer');

Bölümlere yeniden yapılması için Kurumsal değişiklikler kaynağında depolanır tablo dbo.Departments_delta.Aşağıdaki kodu oluşturur ve bu tablo doldurur:

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'dbo.Departments_delta', N'U') IS NOT NULL 
    DROP TABLE dbo.Departments_delta;
GO
CREATE TABLE dbo.Departments_delta (DeptID tinyint NOT NULL PRIMARY KEY, DeptName nvarchar(30), 
    Manager nvarchar(50));
GO
INSERT INTO dbo.Departments_delta VALUES 
    (1, 'Human Resources', 'Margheim'), (2, 'Sales', 'Erickson'),
    (3 , 'Accounting', 'Varkey'),(4, 'Purchasing', 'Barber'), 
    (6, 'Production', 'Jones'), (7, 'Customer Relations', 'Smith');
GO

Son olarak, hedef tablodaki şirket yeniden düzenlemeye yansıtmak için birleştirme İŞLEMİNİ aşağıdaki kodu kullanır deyim kaynak tablo karşılaştırmak için dbo.Departments_delta, hedef tablo ile dbo.Departments.Bu karşılaştırma için arama koşulu deyim on yan tümce tümce tümcesini tanımlanır.Temel sonuçlar karşılaştırılması, aşağıdaki eylemleri alınır.

  • Her ikisini de mevcut departmanları tablos hedef güncelleştirilmiş tablo yeni adları, yeni yöneticileri veya her ikisini de tablo Departments.Hiçbir şey, herhangi bir değişiklik varsa güncelleştirilir.Bu zaman içinde yapılır sonra yan tümce tümce tümce EŞLEŞTİ.

  • Tüm departmanları Departments_'dedelta kayıtlı olmayan Departments içine eklenen Departments.Bu gerçekleştirilir OLDUĞUNDA sonra yan tümce tümce tümcesinin eşleşen değil.

  • Tüm departmanları Departments , mevcut kaynağında tablo Departments_delta tabanından Departments.Bu zaman içinde gerçekleştirilir matched by yan tümce tümce tümce sonra kaynak.

MERGE dbo.Departments AS d
USING dbo.Departments_delta AS dd
ON (d.DeptID = dd.DeptID)
WHEN MATCHED AND d.Manager <> dd.Manager OR d.DeptName <> dd.DeptName
    THEN UPDATE SET d.Manager = dd.Manager, d.DeptName = dd.DeptName
WHEN NOT MATCHED THEN
    INSERT (DeptID, DeptName, Manager)
        VALUES (dd.DeptID, dd.DeptName, dd.Manager)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE
OUTPUT $action, 
       inserted.DeptID AS SourceDeptID, inserted.DeptName AS SourceDeptName, 
       inserted.Manager AS SourceManager, 
       deleted.DeptID AS TargetDeptID, deleted.DeptName AS TargetDeptName, 
       deleted.Manager AS TargetManager;