插入...合并...选择:利用 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中文网其他相关文章!