SQLServerのテーブルの例。
- MainRecords(
id, record
) - AuxRecords(
mainRecords_id, record
) - SourceRecords(
record1, record2
)
MainRecords.id
自己増分型のプライマリIDキーです。
、、、およびすべてを1つのステートメントで選択し、同時にSourceRecords
挿入することは可能ですか?MainRecords
AuxRecords
MainRecords.record = record1
AuxRecords.record = record2
AuxRecords.mainRecords_id = MainRecords.id
編集:
下からのヒントに基づいて、私はこれを試しました...
DECLARE @MainRecords table(id int PRIMARY KEY IDENTITY, record varchar(5))
DECLARE @AuxRecords table(mainRecords_id int, record varchar(5))
DECLARE @SourceRecords table(record1 varchar(5), record2 varchar(5))
INSERT @SourceRecords VALUES ('a', 'a')
INSERT @SourceRecords VALUES ('a', 'b')
INSERT @SourceRecords VALUES ('a', 'c')
INSERT @SourceRecords VALUES ('b', 'a')
INSERT @SourceRecords VALUES ('b', 'b')
INSERT @SourceRecords VALUES ('b', 'c')
INSERT @SourceRecords VALUES ('c', 'a')
INSERT @SourceRecords VALUES ('c', 'b')
INSERT @SourceRecords VALUES ('c', 'c')
INSERT INTO @MainRecords (record)
OUTPUT inserted.id, @SourceRecords.record2
INTO @AuxRecords (mainRecords_id, record)
SELECT record1 FROM @SourceRecords
select * from @MainRecords
select * from @AuxRecords
しかし、残念ながらエラーが発生します。
Msg 137, Level 16, State 1, Line 16
Must declare the scalar variable "@SourceRecords".
これらのテーブル型変数を実際のテーブルに変更すると、エラーが発生します。
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "SourceRecords.record2" could not be bound.
以下は問題なく動作しますが、明らかに完全な解決策ではありません。構文が正しいことを示すために表示しています。
INSERT INTO @MainRecords (record)
OUTPUT inserted.id --, @SourceRecords.record2
INTO @AuxRecords (mainRecords_id) --, record)
SELECT record1 FROM @SourceRecords
だから...私が見逃しているトリックがない限りOUTPUT
、この問題の行き止まりの解決策のようです。
トリガーを使用してビューまたは空のテーブルを作成する他の提案は、問題に対する「単一ステートメント」の解決策ではありません。さらに、それらはあいまいさを追加しますが、いくつかの余分な列を追加し、ストアドプロシージャを使用することも同様に複雑ですが、より明白で簡単です。