Share via


BİRLEŞTİRME (Transact-SQL)

INSERT, update veya kaynaktablo birleştirmek sonuçlar temel alan bir hedeftablo silme işlemleri gerçekleştirir. Örneğin, iki tablo ekleme, güncelleştirme ya da diğer bir tabloiçinde bulunan farklılıklar temel bir tablo satır silme eşitleyebilirsiniz.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

[ WITH <common_table_expression> [,...n] ]
MERGE 
    [ TOP ( expression ) [ PERCENT ] ] 
    [ INTO ] <target_table> [ WITH ( <merge_hint> ) ] [ [ AS ] table_alias ]
    USING <table_source> 
    ON <merge_search_condition>
    [ WHEN MATCHED [ AND <clause_search_condition> ]
        THEN <merge_matched> ] [ ...n ]
    [ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]
        THEN <merge_not_matched> ]
    [ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
        THEN <merge_matched> ] [ ...n ]
    [ <output_clause> ]
    [ OPTION ( <query_hint> [ ,...n ] ) ]    
;

<target_table> ::=
{ 
    [ database_name . schema_name . | schema_name . ]
  target_table
}

<merge_hint>::=
{
    { [ <table_hint_limited> [ ,...n ] ]
    [ [ , ] INDEX ( index_val [ ,...n ] ) ] }
}

<table_source> ::= 
{
    table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] 
        [ WITH ( table_hint [ [ , ]...n ] ) ] 
  | rowset_function [ [ AS ] table_alias ] 
        [ ( bulk_column_alias [ ,...n ] ) ] 
  | user_defined_function [ [ AS ] table_alias ]
  | OPENXML <openxml_clause> 
  | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] 
  | <joined_table> 
  | <pivoted_table> 
  | <unpivoted_table> 
}

<merge_search_condition> ::=
    <search_condition>

<merge_matched>::=
    { UPDATE SET <set_clause> | DELETE }

<set_clause>::=
SET
  { column_name = { expression | DEFAULT | NULL }
  | { udt_column_name.{ { property_name = expression
                        | field_name = expression }
                        | method_name ( argument [ ,...n ] ) }
    }
  | column_name { .WRITE ( expression , @Offset , @Length ) }
  | @variable = expression
  | @variable = column = expression
  | column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression
  | @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression
  | @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression
  } [ ,...n ] 

<merge_not_matched>::=
{
    INSERT [ ( column_list ) ] 
        { VALUES ( values_list )
        | DEFAULT VALUES }
}

<clause_search_condition> ::=
    <search_condition>

<search condition> ::=
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...n ] 

<predicate> ::= 
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression 
    | string_expression [ NOT ] LIKE string_expression 
  [ ESCAPE 'escape_character' ] 
    | expression [ NOT ] BETWEEN expression AND expression 
    | expression IS [ NOT ] NULL 
    | CONTAINS 
  ( { column | * } , '< contains_search_condition >' ) 
    | FREETEXT ( { column | * } , 'freetext_string' ) 
    | expression [ NOT ] IN ( subquery | expression [ ,...n ] ) 
    | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } 
  { ALL | SOME | ANY} ( subquery ) 
    | EXISTS ( subquery ) } 

<output_clause>::=
{
    [ OUTPUT <dml_select_list> INTO { @table_variable | output_table }
        [ (column_list) ] ]
    [ OUTPUT <dml_select_list> ]
}

<dml_select_list>::=
    { <column_name> | scalar_expression } 
        [ [AS] column_alias_identifier ] [ ,...n ]

<column_name> ::=
    { DELETED | INSERTED | from_table_name } . { * | column_name }
    | $action

Bağımsız değişkenler

  • İLE <common_table_expression>
    Olarak da bilinen ortak tabloifade, sonuç kümesi veya görünümü adlı geçici belirtir kapsam birleştirme deyimiçinde tanımlanır. sonuç kümesi basit bir sorgudan elde edilen ve birleştirme deyimbaşvurulmaktadır.Daha fazla bilgi için, bkz. Common_table_expression (Transact-SQL) ile.

  • ÜST ( expression ) [%]
    Sayı veya etkilenen satırların yüzdesini belirtir.expressionbir sayı veya satırları yüzdesi olabilir.ÜST ifade içinde başvurulan satır herhangi bir sırayla düzenlenmiş değil.Daha fazla bilgi için, bkz. ÜST (Transact-SQL).

    ÜST yan tümce , tüm kaynak tablo ile hedef tablo katıldı ve bir INSERT, update veya delete eylem için geçerli olmayan birleştirilmiş satır kaldırılır sonra uygulanır.ÜST yan tümce daha belirtilen değere birleştirilen satır sayısını azaltır ve INSERT, update veya delete eylemleri sýralanmamýþ bir biçimde birleştirilen kalan satırlara uygulanır.Diğer bir deyişle, hiç sipariş satırları içinde OLDUĞUNDA yan tümcelerini tanımlanan eylemler arasında dağıtılır vardır.Örneğin, üst (10) belirterek, 10 satır etkiler; Bu satır 7 güncelleştirilebilir ve 3 eklenen veya 1 silinebilir, güncelleştirilmiş ve 4 5 vb. eklenir.

    Tam tablo tarama kaynak ve hedef Tabloları birleştirme deyim gerçekleştirdiği için birden çok toplu işlemi oluşturarak büyük bir tablo değiştirmek için üst yan tümce kullanarak g/Ç performansı etkilenebilir.Bu senaryoda, emin olmak önemlidir tüm ardışık toplu hedef yeni satırlar.Daha fazla bilgi için, bkz. BİRLEŞTİRME deyimini performansını en iyi duruma getirme.

  • database_name
    Hangi veritabanı adı target_table bulunur.

  • schema_name
    Hangi şema adı target_table ait.

  • target_table
    tablo veya Görünüm hangi karşı veri satırları <table_source> dayanan eşleştirilir <clause_search_condition>.target_tablehedef herhangi INSERT, update veya delete işlemleri birleştirme deyimOLDUĞUNDA yan tümceleri ile belirtilen olur.

    target_table Bir görünüm karşısında herhangi bir eylemi görünümlerini güncelleştirmek için koşulları karşılayan gerekirDaha fazla bilgi için, bkz. Bir görünüm üzerinden veri değiştirme.

    target_tableuzak tabloolamaz.target_tabletüm kuralları üzerinde tanımlı olamaz.

  • [ OLARAK]table_alias
    Bir diğer ad, bir tablobaşvurmak için kullanılır.

  • KULLANARAK <table_source>
    Veri satırları ile eşleştirilir veri kaynak belirtir target_table göre <merge_search koşulu>.Bu eşleşme sonucunu birleştirme deyimOLDUĞUNDA yan tümceleri tarafından gerçekleştirilecek eylemleri kullanılması belirler.<table_source> uzak tablo veya uzak tablolara erişir türetilmiş bir tablo olabilir.

    <table_source> kullanır türetilmiş bir tablo olabilir Transact-SQL tablo değeri Oluşturucu birden çok satır belirterek bir tablo oluşturmak için.

    Sözdizimi ve bağımsız değişkenleri bu yan tümcehakkında daha fazla bilgi için bkz: (Transact-SQL).

  • on <merge_search_condition>
    Koşullar üzerinde belirtir <table_source> ile katıldığı target_table yerini belirlemek için bunlar eşleşir.

    Dikkat notuDikkat

    Amaçları eşleştirmek için kullanılan yalnızca sütunları hedef tablo belirlemek önemlidir.Diğer bir deyişle hedef tablo karşılık gelen sütun kaynak tablokarşılaştırma sütunları belirtin.on yan tümce, hedeftablo satırları gibi belirterek filtre tarafından sorgu performansını artırmak deneme AND NOT target_table.column_x = value. Böylece beklenmedik ve hatalı sonuçlardöndürebilir.

  • SONRA eşleşen zaman <merge_matched>
    Belirleyen tüm satırları target_table tarafından döndürülen satır uyan <table_source> on <merge_search_condition>ve herhangi bir ek arama koşulukarşılayan, güncelleştirildiğini veya göre silinmiş <merge_matched> yan tümce.

    BİRLEŞTİRME deyim en fazla iki eşleşen zaman olabilir yan tümceleri.İki yan tümcesi belirtilirse, sonra ilk yan tümce tarafından bir ve eşlik eden gerekir, <search_condition> yan tümce.Herhangi belirli bir satır için ikinci ilk değilse matched yan tümce yalnızca UYGULANDIĞINDA.Varsa iki eşleşen OLDUĞUNDA yan tümceleri, sonra bir update eylem belirtmeniz gerekir ve bir silme eylembelirtmeniz gerekir.Güncelleştirme alanında belirtilmişse, <merge_matched> yan tümceve birden fazla satırı <table_source>eşleşen bir satır target_table göre <merge_search_condition>, SQL Server işlevi bir hata.BİRLEŞTİRME deyim edemez aynı satırda birden çok kez güncelleştirmek veya güncelleştirin ve aynı satırı silin.

  • [Hedef] tarafından sonra eşleşen değil, <merge_not_matched>
    Satır eklenen belirtir target_table tarafından döndürülen her satır için bir <table_source> on <merge_search_condition> değil eşleşen bir satır target_table, ancak ek arama koşuluile varsa karşılamak bulunmaz.Eklemek için değerleri ile belirtilen <merge_not_matched> yan tümce.BİRLEŞTİRME deyim yalnızca bir tane değil matched yan tümceOLDUĞUNDA olabilir.

  • DEĞİL eşleşen tarafından kaynak, sonra <merge_matched>
    Belirtir, tüm satırlar target_table , eşleşmiyor tarafından döndürülen satır <table_source> on <merge_search_condition>, ve, herhangi bir ek arama koşulukarşılayan, güncelleştirildiğini veya göre silinmiş <merge_matched> yan tümce.

    BİRLEŞTİRME deyim en fazla iki kaynak tarafından eşleşen yan değil, olabilir.İki yan tümcesi belirtilirse, sonra ilk yan tümce tarafından bir ve eşlik eden gerekir, <clause_search_condition> yan tümce.Verilen her satır için ikinci when by eşleşen olmayan kaynak yan tümce yalnızca uygulanan ilk değilse.Vardır, iki kaynak tarafından eşleşen yan değil, sonra bir tane Güncelleştir eylem belirtmeniz gerekir ve bir silme eylembelirtmeniz gerekir.Yalnızca hedef tablo sütunları başvuru yapabilirsiniz <clause_search_condition>.

    Ne zaman hiçbir satır döndürülür tarafından <table_source>, kaynak tablo erişilemiyor.Update veya delete eylem belirtilen, <merge_matched> yan tümce başvuruları kaynak tablo, Hata 207 (geçersiz sütun adı) döndürülür.Örneğin, yan tümce WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 deyim başarısız çünkü neden Col1 kaynak tablo erişilemiyor.

  • VE <clause_search_condition>
    Herhangi bir geçerli arama koşulubelirtir.Daha fazla bilgi için, bkz. Arama koşulu (Transact-SQL).

  • <table_hint_limited>
    hedeftablo INSERT, update ya da birleştirme deyimgerçekleştirilen silme eylemleri her biri için uygulanan bir veya daha çok tablo ipuçlarını belirtir. WITH anahtar sözcük ve ayraçlar gereklidir.

    nolock ve READUNCOMMITTED izin verilmez.tablo ipuçları hakkında daha fazla bilgi için bkz: Tablo İpuçları (Transact-SQL).

    INSERT deyim hedef tablo tablock ipucu belirtme tablockx ipucu belirtme aynı etkiye sahiptir.özel kullanım kilidi bir tabloalınır.forceseek belirtildiğinde, katılan kaynaktabloile hedeftablo örnek örtülü uygulanır.

    Dikkat notuDikkat

    INSERT benzersiz kısıtlamaları ihlal INSERT işlemlerinde sonuçlanabilir sonra [hedef] tarafından eşleşen değil readpast ile belirtebilirsiniz.

  • INDEX ( index_val ,...n ] )
    Örtülü birleştirmektablo kaynakile gerçekleştirmek için hedeftablo adı veya bir veya daha fazla dizin Kimliğini belirtir. Daha fazla bilgi için, bkz. Tablo İpuçları (Transact-SQL).

  • <output_clause>
    Her satır için bir satır döndürür target_table , güncelleştirilirken, eklenen veya silinen, belirli bir siparişi yok.Bu yan tümcedeğişkenleri hakkında daha fazla bilgi için bkz: output yan tümcesi (Transact-SQL).

  • OPTION ( <query_hint> [ ,...n ] )
    Veritabanı Altyapısı'nın deyimişleme şeklini özelleştirmek için en iyi hale getirme ipuçları kullanıldığını belirtir.Daha fazla bilgi için, bkz. Sorgu ipuçları (Transact-SQL).

  • <merge_matched>
    Güncelleştirme belirtir ya da silme tüm satırlara uygulanan eylem target_table , eşleşmiyor tarafından döndürülen satır <table_source> on <merge_search_condition>, ve herhangi bir ek arama koşulukarşılayan.

    • update set <set_clause>
      hedeftablo ve bunları güncelleştirmek kullanılacak değerleri güncelleştirilecek sütun veya değişken adlarının listesini belirtir.

      Bu yan tümcedeğişkenleri hakkında daha fazla bilgi için bkz: UPDATE (Transact-SQL).Bir değişken bir sütun olarak aynı değere izin verilmez.

    • SİL
      Satırların eşleşen satırları belirtir target_table silinir.

  • <merge_not_matched>
    hedeftabloeklemek için değerleri belirtir.

    • (column_list)
      Bir veya birkaç sütun içinde veri eklemek hedef tablo listesidir.Sütunları tek parça ad belirtilmeli veya bildirimin birleştirme deyim başarısız olur.column_listayraç içinde ve virgülle ayrılmış.

    • VALUES ( values_list)
      Virgülle ayrılmış, sabitler, değişkenler veya hedef tablodeğerleri döndüren ifadeler listesidir.Deyimleri execute deyimiçeremez.

    • VARSAYILAN DEĞERLER
      Zorlar her sütuniçin varsayılan değerleri içerecek şekilde eklenen satıra tanımlı.

    Bu yan tümcehakkında daha fazla bilgi için bkz: INSERT (Transact-SQL).

  • <arama koşulu>
    Arama koşullarını belirtmek için kullanılan belirtir <merge_search_condition> veya <clause_search_condition>.Bu yan tümcedeğişkenleri hakkında daha fazla bilgi için bkz: Arama koşulu (Transact-SQL).

Açıklamalar

Üç matched yan tümcesi en az birinin belirtilmesi gerekir, ancak herhangi bir sırada belirtilebilir.Bir değişkeni birden çok kez aynı matched yan tümcetümcesinde güncelleştirilemez.

Herhangi bir ekleme, güncelleştirme veya silme eylemleri birleştirme deyim hedeftablo belirtilen, basamaklı herhangi bilgi bütünlük kısıtlamaları da dahil olmak üzere tanımlanmış kısıtlamalar ile sınırlıdır. BİRLEŞTİRME IGNORE_DUP_KEY küme açık hedef tabloherhangi bir benzersiz dizinler için ise, bu ayarı yoksayar.

BİRLEŞTİRME deyim bir noktalı virgül (;) gerektiren bir deyim Sonlandırıcı olarak.Bir birleştirme deyim Sonlandırıcı çalıştırdığınızda hata 10713 ortaya çıkar.

BİRLEŞTİRME kullanıldığında @@ rowcount (Transact-SQL) eklenen, güncelleştirilen ve istemcisilinen satırların toplam sayısını verir.

Veritabanı Uyumluluk düzey küme için 100 olduğunda birleştirme tam olarak ayrılmış bir anahtar sözcüktür.BİRLEŞTİRME deyim altında veritabanı uyumluluk düzeyi 90 ile 100 kullanılabilir; Veritabanı Uyumluluk düzey 90 küme olduğunda ancak anahtar sözcüğü tam olarak ayrılmış değil.

Tetikleyici uygulaması

Her ekleme, güncelleştirme veya birleştirme deyimiçinde belirtilen eylem silmek SQL Server harekete karşılık tüm gelen sonra tetikleyici tanımlanmış hedeftablo, ancak garanti etmez yangın için hangi eylem tetikleyen ilk veya son. Aynı eylem tanımlı tetikleyiciler sizin belirttiğiniz sırayla düzenleyeni.Sipariş tetikleyicileri harekete geçirme hakkında daha fazla bilgi için bkz: İlk ve son Tetikleyicileri belirtme.

hedeftablo etkinleştirilmiş bir INSTEAD OF tetikleyici INSERT tanımlanmış varsa, güncelleştirmek veya birleştirme deyimtarafından gerçekleştirilen eylem , etkinleştirilmiş bir tetikleyici için tüm birleştirme deyimiçinde belirtilen eylemler yerine olmalıdır sonra silin.

INSTEAD OF update veya delete INSTEAD OF tetikleyici tanımlanmış yoksa target_table, güncelleştirme ve silme işlemleri gerçekleştirilemiyor.Bunun yerine, Tetikleyiciler ateşlenmesine ve inserted ve deleted tabloları buna göre doldurulur.

Varsa INSTEAD OF INSERT Tetikleyicilerini tanımlanan target_table, INSERT işlemi yapılmaz.Bunun yerine, Tetikleyiciler ateşlenmesine ve inserted tablo buna göre doldurulur.

İzinler

kaynaktablo ve INSERT, update üzerinde seçme iznine veya hedeftabloSil izinleri gerektirir. Ek bilgi için bkz: izinler bölümünde seçin, Ekle, güncelleştirme, ve silmek Konular.

Örnekler

A.İçinde tek bir deyim tablo Ekle ve güncelleştir işlemleri gerçekleştirmek için mektup birleştirme kullanma

Ortak bir senaryo eşleşen bir satır varsa, bir veya daha fazla tablodaki sütunların tablo güncelleştirme veya eşleşen bir satır yoksa yeni satır olarak veri ekleme.Bu genellikle uygun update ve INSERT deyimleri içeren bir saklı yordam parametreleri geçirerek yapılır.BİRLEŞTİRME deyimile tek bir deyimhem görevleri gerçekleştirebilirsiniz.deyim INSERT ve update deyimiçeren bir saklı yordam aşağıdaki örnekte gösterilmektedir.Yordam daha sonra tek bir birleştirme deyimkullanarak eşdeğer işlemler gerçekleştirmek için değiştirilir.

USE AdventureWorks2008R2;
GO
CREATE PROCEDURE dbo.InsertUnitMeasure
    @UnitMeasureCode nchar(3),
    @Name nvarchar(25)
AS 
BEGIN
    SET NOCOUNT ON;
-- Update the row if it exists.    
    UPDATE Production.UnitMeasure
    SET Name = @Name
    WHERE UnitMeasureCode = @UnitMeasureCode
-- Insert the row if the UPDATE statement failed.   
    IF (@@ROWCOUNT = 0 )
    BEGIN
        INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name)
        VALUES (@UnitMeasureCode, @Name)
    END
END;
GO
-- Test the procedure and return the results.
EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'Test Value';
SELECT UnitMeasureCode, Name FROM Production.UnitMeasure
WHERE UnitMeasureCode = 'ABC';
GO

-- Rewrite the procedure to perform the same operations using the MERGE statement.
-- Create a temporary table to hold the updated or inserted values from the OUTPUT clause.
CREATE TABLE #MyTempTable
    (ExistingCode nchar(3),
     ExistingName nvarchar(50),
     ExistingDate datetime,
     ActionTaken nvarchar(10),
     NewCode nchar(3),
     NewName nvarchar(50),
     NewDate datetime
    );
GO
ALTER PROCEDURE dbo.InsertUnitMeasure
    @UnitMeasureCode nchar(3),
    @Name nvarchar(25)
AS 
BEGIN
    SET NOCOUNT ON;

    MERGE Production.UnitMeasure AS target
    USING (SELECT @UnitMeasureCode, @Name) AS source (UnitMeasureCode, Name)
    ON (target.UnitMeasureCode = source.UnitMeasureCode)
    WHEN MATCHED THEN 
        UPDATE SET Name = source.Name
    WHEN NOT MATCHED THEN   
        INSERT (UnitMeasureCode, Name)
        VALUES (source.UnitMeasureCode, source.Name)
        OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;
END;
GO
-- Test the procedure and return the results.
EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'New Test Value';
EXEC InsertUnitMeasure @UnitMeasureCode = 'XYZ', @Name = 'Test Value';
EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC', @Name = 'Another Test Value';

SELECT * FROM #MyTempTable;
-- Cleanup 
DELETE FROM Production.UnitMeasure WHERE UnitMeasureCode IN ('ABC','XYZ');
DROP TABLE #MyTempTable;
GO

B.GÜNCELLEŞTİRME gerçekleştirmek için mektup birleştirme kullanarak ve tek bir deyimiçinde bir tablo silme işlemleri

Aşağıdaki örnek, birleştirme güncelleştirmek için kullanır ProductInventory tablo AdventureWorks2008R2 işlenir siparişlerine göre günlük olarak, örnek veritabanının SalesOrderDetail tablo.Quantitysütun ProductInventorytablo , her gün her ürün için verilen siparişlerin sayısını çıkararak güncelleştirilir SalesOrderDetailtablo. Bir ürün için siparişlerin sayısını 0 veya daha az, satır bir ürün stok düzey düşerse bu ürünü silinir için ProductInventory tablo.

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.GÜNCELLEŞTİRME gerçekleştirmek için mektup birleştirme kullanarak ve kullanarak türetilmiş kaynaktablo hedeftablo INSERT işlemleri

Aşağıdaki örnek, değişiklik yapmak için birleştirme kullanır satır ekleme veya güncelleştirme tarafındanSalesReasontablo . Zaman değeri NewName kaynaktablo bir değere uyan Name hedeftablosütun ( SalesReason), ReasonType hedeftablosütun güncelleştirilir. Zaman değeri NewName eşleşmezse, kaynak satır eklendiğinde hedef tablomu.kaynaktablo kullanır türetilmiş bir tablo olan Transact-SQLbirden çok satır kaynaktablobelirlemek içintablo değeri Oluşturucu.  tablo değeri Oluşturucu türetilmiş tablokullanma hakkında daha fazla bilgi için bkz: Tablo değeri Oluşturucu (Transact-SQL).Bu örnek ayrıca output yan tümce sonuçlar bir tablo değişkenine depolayın ve sonra eklenen ve güncelleştirilen satır sayısı döndüren basit bir select işlemi gerçekleştirerek birleştirme statment sonuçlar özetlemek gösterilmiştir.

USE AdventureWorks2008R2;
GO
-- Create a temporary table variable to hold the output actions.
DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));

MERGE INTO Sales.SalesReason AS Target
USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
       AS Source (NewName, NewReasonType)
ON Target.Name = Source.NewName
WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
OUTPUT $action INTO @SummaryOfChanges;

-- Query the results of the table variable.
SELECT Change, COUNT(*) AS CountPerChange
FROM @SummaryOfChanges
GROUP BY Change;

D.BİRLEŞTİRME deyim sonuçlar başka bir tabloekleme

Aşağıdaki örnek birleştirme deyim yan tümce çıkış döndürülen verileri yakalar ve bu verilerin başka bir tabloekler.BİRLEŞTİRME deyim güncelleştirmeleri Quantitysütun ProductInventoryişlenir siparişleri temeltablo, SalesOrderDetailtablo. Örnek güncelleştirilir ve bunları Stok değişiklikleri izlemek için kullanılan başka bir tablo ekler Satır yakalar.

USE AdventureWorks2008R2;
GO
CREATE TABLE Production.UpdatedInventory
    (ProductID INT NOT NULL, LocationID int, NewQty int, PreviousQty int,
     CONSTRAINT PK_Inventory PRIMARY KEY CLUSTERED (ProductID, LocationID));
GO
INSERT INTO Production.UpdatedInventory
SELECT ProductID, LocationID, NewQty, PreviousQty 
FROM
(    MERGE Production.ProductInventory AS pi
     USING (SELECT ProductID, SUM(OrderQty) 
            FROM Sales.SalesOrderDetail AS sod
            JOIN Sales.SalesOrderHeader AS soh
            ON sod.SalesOrderID = soh.SalesOrderID
            AND soh.OrderDate BETWEEN '20030701' AND '20030731'
            GROUP BY ProductID) AS src (ProductID, OrderQty)
     ON pi.ProductID = src.ProductID
    WHEN MATCHED AND pi.Quantity - src.OrderQty >= 0 
        THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty
    WHEN MATCHED AND pi.Quantity - src.OrderQty <= 0 
        THEN DELETE
    OUTPUT $action, Inserted.ProductID, Inserted.LocationID, Inserted.Quantity AS NewQty, Deleted.Quantity AS PreviousQty)
 AS Changes (Action, ProductID, LocationID, NewQty, PreviousQty) WHERE Action = 'UPDATE';
GO

Ek örnekler için başvuruda Ekleme, güncelleştirme ve mektup birleştirme kullanarak veri silme ve BİRLEŞTİRME deyimini performansını en iyi duruma getirme.