2 つ以上のテーブルにデータの行を挿入することが可能かどうかを尋ねたい:
サンプルクエリ:
tblsample、tblsample2 ('tblsample.id'、'tblsample2.id'') の値 ('1'、'1') に挿入します。
構文が間違っていると思いますが、表示したいのは、実行できた可能性のあるプロセスです。
このアイデアがうまくいかない場合のように、これをトランザクションクエリに入れることを考えています。
2 つ以上のテーブルにデータの行を挿入することが可能かどうかを尋ねたい:
サンプルクエリ:
tblsample、tblsample2 ('tblsample.id'、'tblsample2.id'') の値 ('1'、'1') に挿入します。
構文が間違っていると思いますが、表示したいのは、実行できた可能性のあるプロセスです。
このアイデアがうまくいかない場合のように、これをトランザクションクエリに入れることを考えています。
MS SQL と Oracle は複数の挿入をサポートできますが、途中でエラーが発生すると SQL ステートメント全体がロールバックされないため、トランザクションでラップする必要があります。これを行うには、「;」を追加します。あなたの挿入物の間:
INSERT INTO table1 (1,2,3,'Test');INSERT INTO table1 (3,4,5,'Test');INSERT INTO table1 (6,7,8,'Test')
しかし、MS Access でできるちょっとしたトリックは、いくつかのデータを一緒に UNION して挿入するデータのテーブルを作成することです。
INSERT INTO table1 (SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST' UNION ALL SELECT 1,2,3,'TEST')
アクセスでこれを行ってからしばらく経ちましたが、MS Access の構文が間違っている可能性があります。
これは他の多くのデータベースでも機能しますが、構文は異なる場合があります。このアプローチの良い点は、すでにトランザクション対応であるため、トランザクションでラップする必要がないことです。
Oracle は、次のような複数テーブルの挿入をサポートしているようです。
insert all
into sample_table (id, name) values (1, 'foo')
into sample_table2 (id, name) values (2, 'bar')
select * from dual;
しかし、ベンダーに依存しない方法はないと思います。
標準 SQL では不可能です。Oracle、Microsoft SQL Server、およびおそらく他の DBMS では、特定の制限付きで複数テーブルの挿入が許可されています。
一度に 1 つのテーブルしか変更できないという制限は、SQL の基本的な制限です。これにより、いくつかの複数テーブルの整合性制約を強制することが事実上不可能になります。これがおそらく、SQL DBMS が通常非常に限られた一連の制約 (FOREIGN KEY および一部の CHECK 制約) のみをサポートする理由です。