51076


SQL server 2016
standardで、複数のテーブルに一つのSQL文で、同時にINSERTできるならしたいのですが、何かやり方はありますでしょうか？

例えば、複数テーブルを参照したVIEWを作成してVIEWに対してINSERT文を発行すればINSERTできますか？  
sumとかの関数はViewやテーブルには使いません。

一つ目のテーブルにデータを登録する際シーケンスを番号を発行しますが２つ目のテーブルにも同じシーケンス番号を登録したいのです。

順番に複数テーブル登録するのがプログラム仕様的に難しいため質問させていただきました。  
宜しくお願いいたします。

プログラムはc#で作成してます。


CC BY-SA 4.0
2018-12-09T22:53:43.137
51074
2018-12-10T01:20:17.323
9228
question
c# sql-server
SQL server 複数テーブルに同時にINSERTしたい


いくつかのアプローチがあります。

### ストアドプロシージャ

順当に行うのであれば、SQL Server上にストアドプロシージャを作成することです。C#から必要なパラメーターを与えて呼び出すことができます。

### `OUTPUT`句 その１

SQL Serverには[`OUTPUT`句](https://docs.microsoft.com/ja-
jp/sql/t-sql/queries/output-clause-transact-sql?view=sql-
server-2017)という機能があります。この機能を使うと`INSERT`された結果行をそのまま読み出すことができます。データ量を抑えるためにシーケンス番号だけを読み出すこともできます。C#からは`INSERT`文を[`SqlCommand.ExecuteReader`メソッド](https://docs.microsoft.com/en-
us/dotnet/api/system.data.sqlclient.sqlcommand.executereader?view=netframework-4.7.2)で実行することで読み出せます。

### `OUTPUT`句 その２

`OUTPUT`句には更に`INTO`で指定したテーブルへ挿入を行う機能があります。ただしいくつかの条件があるため、利用できないかもしれません。

* * *

> 複数テーブルを参照したVIEWを作成してVIEWに対してINSERT文を発行すればINSERTできますか？

SQL Serverには[更新可能なビュー](https://docs.microsoft.com/ja-
jp/sql/t-sql/statements/create-view-transact-sql?view=sql-
server-2017#updatable-views)という機能はあります。しかし「1 つのベース
テーブルのみの列を参照している」という条件があるため、質問のケースでは利用できません。


CC BY-SA 4.0
2018-12-10T01:20:17.323
51076
2018-12-10T01:20:17.323
4236
51074
answer