簡體   English   中英

使用OUTPUT子句從SELECT INSERT語句中檢索原始和新標識映射

[英]Retrieve original and new identities mapping from SELECT INSERT statement using OUTPUT clause

我有一個有兩列的表:

CREATE TABLE MyTable(
  Id int IDENTITY(1,1) NOT NULL,
  Name nvarchar(100) NOT NULL);

我想使用SELECT INSERT語句復制數據:

INSERT INTO MyTable (Name)
SELECT Name FROM MyTable

這里是三角形部分 - 我想檢索原始身份和新身份之間的映射表:

DECLARE @idsMap TABLE (OriginalId int, NewId int)

我知道我想使用OUTPUT子句 ,但由於某種原因它不起作用:

INSERT INTO MyTable (Name)
OUTPUT t.Id, INSERTED.Id INTO @idsMap (OriginalId, NewId)
SELECT Name FROM MyTable t
-- Returns error The multi-part identifier "t.Id" could not be bound.

相關問題:
SQL插入使用select返回多個身份?
可以插入表參數,還可以檢索標識值?

它可以使用MERGE INTOOUTPUT

MERGE INTO MyTable AS tgt
USING MyTable AS src ON 1=0 --Never match
WHEN NOT MATCHED THEN
INSERT (Name)
VALUES (src.Name)
OUTPUT
    src.Id,
    inserted.Id
INTO @idsMap;

如何向MyTable添加新列? 只要你需要分析或其他什么,你可以保留它。 我不得不說創建一個表的副本對我來說似乎有點不對,但這取決於你自己決定。

這樣的事可能適合你。

alter table MyTable
add OldID int null;

INSERT INTO MyTable (Name, OldID)
SELECT Name , Id
FROM MyTable t

select * from MyTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM