首页 >数据库 >mysql教程 >如何在 SQL Server INSERT 操作期间使用 MERGE 从多个表中捕获数据?

如何在 SQL Server INSERT 操作期间使用 MERGE 从多个表中捕获数据?

Patricia Arquette
Patricia Arquette原创
2025-01-03 19:08:40927浏览

How Can I Capture Data from Multiple Tables During an SQL Server INSERT Operation Using MERGE?

在 SQL Server 中插入...合并...选择

在 SQL Server 中,INSERT INTO...SELECT 语句允许您将 SELECT 查询中的数据插入到目标表中。但是,当 SELECT 查询涉及到多个表的数据时,OUTPUT 子句无法跨不同表捕获数据。

引入 MERGE

要解决此问题,可以考虑使用合并语句。 MERGE 将 INSERT、UPDATE 和 DELETE 操作组合到单个语句中。它允许您根据特定条件有条件地对目标行执行操作。

使用 MERGE 输出数据

要从插入表和源表中捕获数据,您可以在 MERGE 语句中使用 OUTPUT 子句。以下示例演示如何从多个表插入数据并输出 Inserted.ID 和 Table2.ID:

MERGE INTO Table3 USING
(
    SELECT null AS col2,
           110 AS col3,
           Table1.ID AS col4,
           Table2.Column2 AS col5,
           Table2.ID AS col6
    FROM Table1
    JOIN Table1Table2Link ON Table1.ID = Table1Table2Link.Column1
    JOIN Table2 ON Table1Table2Link.Column2 = Table2.ID
) AS s ON 1 = 0 -- Always not matched
WHEN NOT MATCHED THEN
    INSERT (Column2, Column3, Column4, Column5)
    VALUES (s.col2, s.col3, s.col4, s.col5)
OUTPUT Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);

在此 MERGE 语句中:

  • USING 子句定义来自 SELECT 查询的源数据。
  • ON 子句指定 MERGE 操作将始终为 NOT MATCHED 条件(即,从不更新或删除)。
  • WHEN NOT MATCHED 子句定义将源表中的数据插入到 Table3 的 INSERT 操作。
  • OUTPUT 子句捕获来自的 Inserted.ID源表 (s.col6) 中的目标表 (Table3) 和 Table2.ID 并将它们存储在表变量中@MyTableVar。

以上是如何在 SQL Server INSERT 操作期间使用 MERGE 从多个表中捕获数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn