7

私は2つのテーブルを持っていTable_1ますTable_2.

Table_1PK(自動インクリメントint) とValue( nchar(10)) があります。

Table_2FK( int)、Key( nchar(10))、Value( )がありnchar(10)ます。

つまり、Table_1はデータのテーブルであり、 の 1 行が の0 個、1 個、または複数のキーと値に対応するTable_2キー値ストアです。Table_1Table_2

からの主キーを使用して、に 1 行を挿入しTable_1、 に可変数の行を挿入するクエリをプログラムで構築するコードを書きたいと思います。Table_2Table_1

1行で簡単にできます:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

しかし、SQL は複数の行を持つという考えを好まないようです。これは失敗します:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test2Key', 'Test2Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test3Key', 'Test3Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

これを機能させる方法はありますか?

4

2 に答える 2

3

私は答えにコードを入れなければなりませんでした.コメントではそれは醜く見えます...

CREATE TABLE #Tmp(PK int, value nchar(10))

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, inserted.[Value] INTO #Tmp
SELECT 'Test'

INSERT INTO Table_2 (FK, [Key], Value)
SELECT PK, 'Test1Key', 'Test1Val' FROM #Tmp
UNION ALL SELECT PK, 'Test2Key', 'Test2Val' FROM #Tmp
UNION ALL SELECT PK, 'Test3Key', 'Test3Val' FROM #Tmp

ところで、SQL Server では、醜いハックなしでは 1 つのクエリですべてを行うことはできません...

于 2012-10-26T21:07:22.060 に答える
0

値をパラメータに入れてから、3つまたは 1 つのステートメントINSERTED.PKでテーブル 2 に挿入してみてください。INSERT..VALUESINSERT..SELECT

于 2012-10-26T20:41:46.633 に答える