Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有条件地将Output子句添加到Merge语句_Sql Server_Merge_Conditional Statements - Fatal编程技术网

Sql server 有条件地将Output子句添加到Merge语句

Sql server 有条件地将Output子句添加到Merge语句,sql-server,merge,conditional-statements,Sql Server,Merge,Conditional Statements,我有一个merge语句,我想输出“id”字段(如果存在)。目前,我有一个语句,可以输出更新或删除的id,但如果没有名为id的列,则会中断。是否有方法向merge语句添加条件?以下是merge语句(忽略源数据值,因为它们只是占位符): 将PACWARE.DHS.SVDDME与(HOLDLOCK)合并为目标 使用(值(,“”,,,,,0x414c414e205348414c4f534b59))作为源 ([代码]、[TEMPADD1]、[TEMPADD2]、[TEMPCITY]、[TEMPSTATE]

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

将PACWARE.DHS.SVDDME与(HOLDLOCK)合并为目标
使用(值(
,“”,,,,,0x414c414e205348414c4f534b59))作为源
([代码]、[TEMPADD1]、[TEMPADD2]、[TEMPCITY]、[TEMPSTATE]、[TEMPZIP]、[ATTENTION])
在target.CODE上u=source.CODE_
当匹配时
更新
设置
target.[CODE\u]=source.[CODE\u],target.[TEMPADD1]=source.[TEMPADD1],target.[TEMPADD2]=source.[TEMPADD2],target.[TEMPCITY]=source.[TEMPCITY],target.[TEMPSTATE]=source.[TEMPSTATE],target.[TEMPZIP]=source.[TEMPZIP],target.[ATTENTION]=source.[ATTENTION]
当不匹配时
插入([代码]、[TEMPADD1]、[TEMPADD2]、[TEMPCITY]、[TEMPSTATE]、[TEMPZIP]、[ATTENTION])
值(source.[CODE.],source.[TEMPADD1],source.[TEMPADD2],source.[TEMPCITY],source.[TEMPSTATE],source.[TEMPZIP],source.[ATTENTION])
输出插入.id;

我决定在应用程序层处理这个问题(通过有条件地向函数添加输出行)。这比试图找到一个标识列并输出它要简单。用户只需将字段传递给他们想要返回的字段。

这将需要一些动态SQL来获得不太明显的好处。对于答案,Richard,我将强制用户传递他们想要返回的列,而不是试图获取一个ID。
    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;