2009-08-22 18 views
1

こんにちは私は、複数のテーブルにデータを挿入する際に問題があります。私はプライマリキー&のテーブル内の参照キーを定義しているので、両方のテーブルに単一のクエリでデータを挿入したいのですが.......どのようにすればいいですか........... ????? ??複数のテーブルにデータを挿入する

答えて

0

あなたの言語はINSERT ALL構造をサポートしていますか?もしそうなら、それがこれを行う最善の方法です。実際それが唯一の方法です。 another SO threadにこの構文の例を掲載しました(この例の構文はOracle SQLから提供されています)。

もう1つの方法は、プライマリキーテーブルにレコードを挿入した後、参照テーブルにレコードを挿入するトランザクションストアドプロシージャを構築することです。

1

これはトランザクションが意味するものです。標準SQLでは、一度に1つの文を複数の表に挿入することはできません。それを行うための正しい方法は次のとおりです。お好みの

-- begin transaction 
insert into table 1 ... 
insert into table 2 ... 
commit 
0

そして、1それを行うには、あなたのオブジェクトを作成し、それを他の関係を設定します(Hibernateは、NHibernateのような)ORMを使用して、最終的にはちょうどメインオブジェクトを保存しています次のようになります。

A a; 
B b; 
C c; 
a.set(b); 
a.set(c); 
DAO.saveOrUpdate(a); 

あなたはDAO.saveOrUpdate(a)に気付かなければなりません。コードの行だけ休止状態で動作しますが、それは3テーブルA、Bにデータを挿入、C.

4

あなたの質問は、特定の問題が何であるかについて、正確に明確ではありません。 3つの可能性があります:
1. 1つのINSERTステートメントで2つのテーブルに挿入したい場合
2つの挿入を行いたいが、他に何も得られない場合は
3。あなたが一つのテーブルに挿入する、2番目のテーブル


1への答えは簡単であるに挿入する主キーを取得:

You can't. 


2への答えは単純すぎる:

BEGIN TRANSACTION 
    INSERT INTO <table1> (a,b,c) VALUES (1,2,3) 
    INSERT INTO <table2> (a,b,c) VALUES (1,2,3) 
COMMIT TRANSACTION 


3の答えがあるが、いくつかの可能性があります。それぞれはあなたがしたいことに正確に依存します。ほとんどの場合、SCOPE_IDENTITY()を使用しますが、さまざまなオプションと複雑さを理解するには、@@identityIDENT_CURRENT()を参照することもできます。

BEGIN TRANSACTION 

    INSERT INTO <dimension_table> (name) 
     VALUES ('my new item') 

    INSERT INTO <fact_table> (item_id, iteam_value) 
     VALUES (SCOPE_IDENTITY(), 1) 

COMMIT TRANSACTION 
関連する問題