2011-02-28 33 views
5

Kayıtlı yordamımda birleştirme deyimi yapıyorum. Güncellemeler ve ekler sırasında satırları saymaya ihtiyacım var. Güncellenmiş satırları (hem güncelleştirme hem de ekleme için) nasıl değiştirebileceğimi öğrenmek için ortak bir değişken kullanırsam, bu güncelleştirme güncellememde aldığım sayıdır ve bu benim eklediğim sayıdır. Lütfen bana daha iyi bir yol verinSQL Server Birleştirme deyimi

cevap

8

Eylem türünü ve ardından OUTPUT sözdizimini $action sütununda tutmak için bir tablo değişkeni oluşturabilirsiniz. Veri hareket sütuna saklayabilirsiniz neler

Örnek

/*Table to use as Merge Target*/ 
DECLARE @A TABLE (
[id] [int] NOT NULL PRIMARY KEY CLUSTERED, 
[C] [varchar](200) NOT NULL) 

/*Insert some initial data to be updated*/ 
INSERT INTO @A 
SELECT 1, 'A' UNION ALL SELECT 2, 'B' 

/*Table to hold actions*/ 
DECLARE @Actions TABLE(act CHAR(6)) 

/*Do the Merge*/ 
    MERGE @A AS target 
    USING (VALUES (1, '@a'),(2, '@b'),(3, 'C'),(4, 'D'),(5, 'E')) AS source (id, C) 
    ON (target.id = source.id) 
     WHEN MATCHED THEN 
     UPDATE SET C = source.C 
    WHEN NOT MATCHED THEN  
     INSERT (id, C) 
     VALUES (source.id, source.C) 
    OUTPUT $action INTO @Actions; 

    /*Check the result*/ 
    SELECT act, COUNT(*) AS Cnt 
    FROM @Actions 
    GROUP BY act 

İade

act Cnt 
------ ----------- 
INSERT 3 
UPDATE 2 
+0

.. i yerleştirilir kaç satır bilmek istiyorsanız Yani, ben bazı kısıtlama ile tablo sorgulamak gerekir sağa, bunun için wat verisinin insert eklendiğinde sütun başlatabileceğini bilmem gerekiyor mu? Güncelleme ne zaman oldu? –

+0

'@ l_ins_row = COUNT (*)' dan @ action nerede act = 'inserted' ' –

+0

gibi her işlemin sayısını almam gerekiyor gibi –