tsql – T-SQL:在OUTPUT子句中插入原始值

前端之家收集整理的这篇文章主要介绍了tsql – T-SQL:在OUTPUT子句中插入原始值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表ItemID(ItemID,Name,…),其中ItemID是自动生成的身份

我想在这个表中添加行FROM select在同一个表上.
并将原始ItemID和NewlyGeneratedID之间的引用保存到表变量中.

所以我想让它看起来如下:

DECLARE @ID2ID TABLE (OldItemID INT,NewItemID INT);

INSERT INTO Items OUTPUT Items.ItemID,INSERTED.ItemID INTO @ID2ID
SELECT * FROM Items WHERE Name = 'Cat';

但是Items.ItemID显然在这里无效.有没有解决方法使OUTPUT从SELECT语句中获取原始ItemID?

解决方法

如果您在sql Server 2008上,您可以使用 MERGE获取当前和新的ID.该技术描述于 this question.

对于您的示例,该语句可能如下所示:

MERGE Items AS t
USING (
  SELECT *
  FROM Items
  WHERE Name = 'Cat'
) AS s
ON 0 = 1
WHEN NOT MATCHED BY TARGET THEN
  INSERT (target_column_list) VALUES (source_column_list)
OUTPUT INSERTED.ItemID,S.ItemID INTO @ID2ID (OldItemID,NewItemID);

猜你在找的MsSQL相关文章