質問: SQL server 2016 standardで、複数のテーブルに一つのSQL文で、同時にINSERTできるならしたいのですが、何かやり方はありますでしょうか? 例えば、複数テーブルを参照したVIEWを作成してVIEWに対してINSERT文を発行すればINSERTできますか? sumとかの関数はViewやテーブルには使いません。 一つ目のテーブルにデータを登録する際シーケンスを番号を発行しますが2つ目のテーブルにも同じシーケンス番号を登録したいのです。 順番に複数テーブル登録するのがプログラム仕様的に難しいため質問させていただきました。 宜しくお願いいたします。 プログラムはc#で作成してます。
回答: いくつかのアプローチがあります。 ### ストアドプロシージャ 順当に行うのであれば、SQL Server上にストアドプロシージャを作成することです。C#から必要なパラメーターを与えて呼び出すことができます。 ### `OUTPUT`句 その1 SQL Serverには`OUTPUT`句という機能があります。この機能を使うと`INSERT`された結果行をそのまま読み出すことができます。データ量を抑えるためにシーケンス番号だけを読み出すこともできます。C#からは`INSERT`文を`SqlCommand.ExecuteReader`メソッドで実行することで読み出せます。 ### `OUTPUT`句 その2 `OUTPUT`句には更に`INTO`で指定したテーブルへ挿入を行う機能があります。ただしいくつかの条件があるため、利用できないかもしれません。 > > 複数テーブルを参照したVIEWを作成してVIEWに対してINSERT文を発行すればINSERTできますか? > > > SQL Serverには更新可能なビューという機能はあります。しかし「1 つのベース テーブルのみの列を参照している」という条件があるため、質問のケースでは利用できません。