我在紧跟一个声明之后立即拥有此代码。我对 1行'混淆了以下代码中的关键字。
有人可以解释一下我需要它吗?
此代码位于merge语句之前。
CREATE TABLE #UpdatedRecords
(
-- Create variable needed to count different merge operations
mergeAction NVARCHAR(10)
);
/ ==== 合并声明逻辑在这里.. ==== /
OUTPUT $action
INTO #UpdatedRecords
;
SET @RC = @@ROWCOUNT;
SELECT @insertMAddressTypeCount=[INSERT]
, @updateMAddressTypeCount=[UPDATE]
FROM (
SELECT mergeAction,1 rows
FROM #UpdatedRecords
) p
PIVOT
(
COUNT(rows)
FOR mergeAction IN
( [INSERT], [UPDATE], [DELETE])
) AS pvt
;
答案 0 :(得分:1)
查询的1 rows
部分将一个具有常量值1
的列添加到名为p
的派生表(“子查询”)中。该值用于通过count(rows)
进行计数,但最终不需要,因为count(*)
会给出相同的结果。
这是一个没有pivot
的等效查询,您可能会发现它有用或具有启发性:
select
@inserts = count(case when mergeAction = 'INSERT' then 1 end),
@updates = count(case when mergeAction = 'UPDATE' then 1 end)
from #UpdatedRecords;
编辑:我忘记pivot
不支持count(*)
操作,count(mergeAction)
也不支持。这就是OP查询中虚拟列的原因。