我正在编写存储过程中的合并语句。我需要在更新和插入期间计算行数。如果我使用一个通用变量来获取更新的行数(适用于更新和插入),那么如何区分这是从更新中得到的计数,还是从插入中得到的计数。请给我一个更好的方法。
我正在编写存储过程中的合并语句。我需要在更新和插入期间计算行数。如果我使用一个通用变量来获取更新的行数(适用于更新和插入),那么如何区分这是从更新中得到的计数,还是从插入中得到的计数。请给我一个更好的方法。
$action
用 OUTPUT
输出到该变量中。/*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