0

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」をバインドできませんでした。

4

2 に答える 2

3

INSERT の OUTPUT 句で t2 から値を取得することはできません (UPDATE および DELETE では取得できます)。

MSDN から:

from_table_name

更新または削除する行を指定するために使用される DELETE、UPDATE、または MERGE ステートメントの FROM 句に含まれるテーブルを指定する列プレフィックスです。

INSERT が言及されていないことに注意してください

あなたはしなければならないでしょう

于 2011-08-01T11:36:21.353 に答える
0

コメントから

SELECT ステートメントで t2.id を選択していないため、機能しません。それを機能させるには、ステートメントに t2.id を追加する必要がありますが、この ID を t1 に INSERT する必要がありますが、これは必要なものではありません。私はまだそれをエレガントに解決する方法を考えています。

エレガントな解決策ではありませんが、最も簡単なのは

  • にダミーt2ID列を追加t1
  • (節を使用せずに)INSERTを含めるように変更します。t2IDOUTPUT
  • すべての新しい値を選択して@IdTable
  • ダミー列を削除します

SQL スクリプト

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
于 2011-08-01T11:47:04.527 に答える