4

私は2つの列を持つテーブルを持っています:

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

ここにトリッキーな部分があります-元のIDと新しいIDの間のマッピングテーブルを取得したい:

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.

関連する質問:
select を使用した SQL 挿入は複数の ID を返すことができますか?
テーブル パラメーターを使用して挿入し、ID 値を取得することは可能ですか?

4

2 に答える 2

1

MyTable に新しい列を追加するだけではどうですか? 分析などが必要な限り、それを保持できます。テーブルのコピーを作成するのは少し気が引けますが、それはあなた次第です。

このようなものがうまくいくかもしれません。

alter table MyTable
add OldID int null;

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

select * from MyTable
于 2014-07-10T14:44:42.123 に答える