2011-07-12 20 views
0

INSERT文で、表#ttの列colNEWを列col5の表@ t2の値で埋めるにはどうすればよいですか? 現在の式を再利用できますか、またはマージを使用する必要がありますか?挿入中に列を挿入する

私は私が誰かを助けることを願ってMSSQLサーバ10

DECLARE @t1 TABLE (id INT IDENTITY(1,1), col1 INT, col2 INT) 
DECLARE @t2 TABLE (col3 INT, col4 INT, col5 INT) 

INSERT @t2 VALUES (1,2,3);INSERT @t2 VALUES (2,3,4) 

CREATE TABLE #tt (id INT, col3 INT, col4 INT, colNEW int) 

INSERT #tt (id, col3, col4) 
SELECT * 
FROM 
    ( 
INSERT INTO @t1(col1,col2) 
OUTPUT Inserted.id, Inserted.col1,Inserted.col2 
SELECT col3, col4 
FROM @t2 
) t 

を使用しています。

+0

あなたは 'merge'を使う必要があります。 http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id –

+0

実際には、ちょうど実現 - あなたがmssqlサーバー9と言うとき、 2005年を意味する?その場合、そのバージョンにはマージは存在しません。 –

+0

私はmssql server 10を意味していました。 –

答えて

2

あなたはマージを使用する必要があります:

DECLARE @t1 TABLE (id INT IDENTITY(1,1), col1 INT, col2 INT) 
DECLARE @t2 TABLE (col3 INT, col4 INT, col5 INT) 

INSERT @t2 VALUES (1,2,3);INSERT @t2 VALUES (2,3,4) 

CREATE TABLE #tt (id INT, col3 INT, col4 INT, colNEW int) 

INSERT #tt (id, col3, col4,colNew) 
SELECT * 
FROM 
    ( 
MERGE INTO @t1 t1 
using @t2 t2 on 1=0 
when not matched then INSERT (col1,col2) 
VALUES(t2.col3, t2.col4 ) 
OUTPUT Inserted.id, Inserted.col1,Inserted.col2,t2.col5 
) t 

select * from #tt 

これはMERGEのわずかな誤用である - 私はそれが他のテーブルがOUTPUT句で参照することができますので、それを使用している - というよりも(のために挿入する)だけテーブルinserted

+0

すべてのロジックに対して、このコードは機能しません。私はマイクロソフトが意図しない機能(単語「バグ」の書き直し)を持っていると思います。 –

+0

@ t-clausen.dk - 私は便利だった2008年のインスタンスに対してこのスクリプトを実行し、うまくいきました。エラーメッセージが表示されますか? –

+0

@ t-clausen.dk - うまく動作します。ちょうどコピー貼り付けて実行します。 –

関連する問題