加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:19:27 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表ItemID(ItemID,Name,…),其中ItemID是自动生成的身份 我想在这个表中添加行FROM select在同一个表上. 并将原始ItemID和NewlyGeneratedID之间的引用保存到表变量中. 所以我想让它看起来如下: DECLARE @ID2ID TABLE (OldItemID INT,NewItemID INT);I
我有一个表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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读