首页 > 数据库 > mysql教程 > MERGE 语句如何检索 SQL Server INSERT 操作中生成的标识和源数据?

MERGE 语句如何检索 SQL Server INSERT 操作中生成的标识和源数据?

Barbara Streisand
发布: 2024-12-29 15:54:12
原创
996 人浏览过

How Can MERGE Statement Retrieve Generated Identity and Source Data in SQL Server INSERT Operations?

插入...合并...选择:利用 MERGE 检索生成的标识

在 SQL Server 中,INSERT... SELECT 语句允许将数据从另一个表或查询插入到目标表中。然而,从多个来源提取值时它有局限性。存在使用 MERGE 语句的解决方案,该语句可以检索插入的数据和源数据。

为了说明这一点,请考虑以下情况:

INSERT INTO Table3 (Column2, Column3、Column4、Column5)<br>SELECT null, 110, Table1.ID, Table2.Column2<br>FROM Table1<pre class="brush:php;toolbar:false"> JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1
 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
登录后复制

需要从 Table3 和 Table2.ID 捕获生成的标识 (Inserted.ID) 并将它们插入到临时表或变量中。虽然 OUTPUT 子句通常用于此目的,但它无法从不同的表中提取数据。

解决方案在于使用 MERGE 来填充表,而不是 INSERT...SELECT。这允许访问输出子句中插入的值和源值:

MERGE INTO Table3 USING<br>(<pre class="brush:php;toolbar:false">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 --总是不匹配
当不匹配时
插入(Column2、Column3、Column4、 Column5)
值 (s.col2, s.col3, s.col4, s.col5)
输出 Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);

通过使用 MERGE,OUTPUT 子句可以同时获取插入的标识(Inserted.ID)和 Table2 中的值(Table2.ID),并将它们插入到 @MyTableVar 中以供进一步使用正在处理。

以上是MERGE 语句如何检索 SQL Server INSERT 操作中生成的标识和源数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板