2009-08-22 2 views
1

привет, у меня возникли проблемы с вставкой данных в несколько таблиц. я определяю первичный ключ & ссылочный ключ в таблицах теперь я хочу вставить данные в обе таблицы в одном запросе ....... как я могу это сделать ........... ????? ??Вставка данных в несколько таблиц

ответ

0

Поддерживает ли ваш язык конструкцию INSERT ALL? Если это так, это лучший способ сделать это. На самом деле это единственный способ. Я разместил пример этой конструкции в another SO thread (этот пример синтаксиса поступает из Oracle SQL).

Другой вариант заключается в создании транзакционной хранимой процедуры, которая вставляет запись в таблицу первичного ключа, за которой следует запись в справочную таблицу.

1

Это то, для чего предназначены транзакции. Стандартный SQL не допускает одновременного ввода одного оператора в несколько таблиц. Правильный способ сделать это:

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

И 1 по вашему выбору, чтобы сделать что использование ORM (например, Hibernate, NHibernate) вы сделаете свой объект и установить другое отношение к нему, и, наконец, просто сохранить основной объект , например:

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

вы должны заметить свой DAO.saveOrUpdate (a); строка кода просто работать с Hibernate, но вставить данные в таблицу 3 A, B, C.

4

Ваш вопрос не совсем ясно, о том, что конкретная проблема. Я вижу три возможности:
1. Вы хотите вставить в две таблицы Wiht одной инструкции INSERT
2. Вы хотите сделать две вставки, но без чего-либо еще будучи в состоянии «получить в середине»
3. Вы хотите вставить в одну таблицу, а затем получить первичный ключ, чтобы вставить вторую таблицу


ответ 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(), но вы также можете найти @@identity и IDENT_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