我有一个表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';
解决方法
如果您在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);