有条件地将Output子句添加到Merge Statement

时间:2012-12-17 21:09:37

标签: sql-server merge conditional-statements

我有一个合并声明,我想输出“id”字段(如果存在)。目前,我有一个声明输出任何更新或删除的ID,但如果没有名为id的列,则会中断。有没有办法在merge语句中添加条件?这是合并语句(忽略源数据值,因为它们只是占位符):

    MERGE PACWARE.DHS.SVDDME WITH (HOLDLOCK) as target
USING (VALUES(<code>,<address1>,'',<city>,<state>,<zip>,0x414c414e205348414c4f534b59)) AS source
([CODE_],[TEMPADD1],[TEMPADD2],[TEMPCITY],[TEMPSTATE],[TEMPZIP],[ATTENTION])
ON target.CODE_ = source.CODE_
WHEN MATCHED THEN
UPDATE
SET
target.[CODE_] = source.[CODE_],target.[TEMPADD1] = source.[TEMPADD1],target.[TEMPADD2] = source.[TEMPADD2],target.[TEMPCITY] = source.[TEMPCITY],target.[TEMPSTATE] = source.[TEMPSTATE],target.[TEMPZIP] = source.[TEMPZIP],target.[ATTENTION] = source.[ATTENTION]
WHEN NOT MATCHED THEN
INSERT([CODE_],[TEMPADD1],[TEMPADD2],[TEMPCITY],[TEMPSTATE],[TEMPZIP],[ATTENTION])
values(source.[CODE_],source.[TEMPADD1],source.[TEMPADD2],source.[TEMPCITY],source.[TEMPSTATE],source.[TEMPZIP],source.[ATTENTION])
OUTPUT INSERTED.id;

1 个答案:

答案 0 :(得分:0)

我已决定在应用层处理此问题(通过有条件地向该函数添加输出行)。这比尝试查找标识列并输出它更简单。用户只需传递他们想要返回的字段。