t1には、自動生成された主キーと呼ばれるものがありますpkId
INSERT INTO t1( title, summary)
OUTPUT inserted.pkId, t2.id INTO @IdTable(New_Id, Old_Id)
SELECT t2.title, t2.summary
FROM t2
なぜこれが機能しないのか誰かに教えてもらえますか?
エラーが発生しますマルチパート識別子「t2.id」をバインドできませんでした。
t1には、自動生成された主キーと呼ばれるものがありますpkId
INSERT INTO t1( title, summary)
OUTPUT inserted.pkId, t2.id INTO @IdTable(New_Id, Old_Id)
SELECT t2.title, t2.summary
FROM t2
なぜこれが機能しないのか誰かに教えてもらえますか?
エラーが発生しますマルチパート識別子「t2.id」をバインドできませんでした。
INSERT の OUTPUT 句で t2 から値を取得することはできません (UPDATE および DELETE では取得できます)。
from_table_name
更新または削除する行を指定するために使用される DELETE、UPDATE、または MERGE ステートメントの FROM 句に含まれるテーブルを指定する列プレフィックスです。
INSERT が言及されていないことに注意してください
あなたはしなければならないでしょう
コメントから
SELECT ステートメントで t2.id を選択していないため、機能しません。それを機能させるには、ステートメントに t2.id を追加する必要がありますが、この ID を t1 に INSERT する必要がありますが、これは必要なものではありません。私はまだそれをエレガントに解決する方法を考えています。
エレガントな解決策ではありませんが、最も簡単なのは
t2ID
列を追加t1
INSERT
を含めるように変更します。t2ID
OUTPUT
@IdTable
ALTER TABLE t1 ADD COLUMN t2ID INTEGER NULL
GO
INSERT INTO t1( title, summary, t2ID)
SELECT t2.title, t2.summary, t2.ID
FROM t2
INSERT INTO @IdTable
SELECT pkID, t2ID
FROM t1
WHERE t2ID IS NOT NULL
GO
ALTER TABLE t1 DROP COLUMN t2ID
GO