Оператор слияния SQL Server - PullRequest
       10

Оператор слияния SQL Server

5 голосов
/ 28 февраля 2011

Я делаю оператор слияния в моей хранимой процедуре.Мне нужно посчитать строки во время обновлений и вставок.Если я использую общую переменную, чтобы получить обновленные строки (как для обновления, так и для вставки), как я могу отличаться, это число, которое я получил от обновления, и это число, которое я получил от вставки.Пожалуйста, дайте мне лучший способ

1 Ответ

8 голосов
/ 28 февраля 2011

Вы можете создать табличную переменную для хранения типа действия, а затем OUTPUT псевдо $action столбца.

Пример

/*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

Возвращает

act    Cnt
------ -----------
INSERT 3
UPDATE 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...