Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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合并-持久化数据_Sql_Sql Server - Fatal编程技术网

SQL合并-持久化数据

SQL合并-持久化数据,sql,sql-server,Sql,Sql Server,我使用SQL Server 2014 在我的过程中,我有一个MERGE语句,我对此有一个问题 我的MERGE语句具有以下简单结构: MERGE dbo.T1 AS tgt USING (SELECT ...) AS src ON ... WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT ... OUTPUT inserted.MyColumn INTO @NewTable (MyColumnValue); 就像它

我使用SQL Server 2014

在我的过程中,我有一个MERGE语句,我对此有一个问题

我的MERGE语句具有以下简单结构:

MERGE dbo.T1 AS tgt
USING (SELECT ...) AS src ON ...
WHEN MATCHED THEN
    UPDATE ...
WHEN NOT MATCHED THEN
   INSERT ...

OUTPUT inserted.MyColumn
INTO @NewTable (MyColumnValue);
就像它为所有插入填充一个表一样,我也需要它为所有更新填充另一个表


是可能的,如果是的话,请告诉我怎么做

不,不可能将结果指向两个表。看

您可以使表格更宽,并在同一行上输出插入列和删除列:

MERGE dbo.T1 AS tgt
USING (SELECT ...) AS src ON ...
WHEN MATCHED THEN
    UPDATE ...
WHEN NOT MATCHED THEN
INSERT ...

OUTPUT $action, inserted.col1, inserted.col2, deleted.col1, deleted.col2
INTO @NewTable (action, inserted_col1, inserted_col2, deleted_col1, deleted_col2);

然后,您可以根据需要拆分@NewTable。

输出$action、inserted.*和deleted.*将为您的列进行更新,您可以使用$action从更新中提取记录。