привет, у меня возникли проблемы с вставкой данных в несколько таблиц. я определяю первичный ключ & ссылочный ключ в таблицах теперь я хочу вставить данные в обе таблицы в одном запросе ....... как я могу это сделать ........... ????? ??Вставка данных в несколько таблиц
ответ
Поддерживает ли ваш язык конструкцию INSERT ALL? Если это так, это лучший способ сделать это. На самом деле это единственный способ. Я разместил пример этой конструкции в another SO thread (этот пример синтаксиса поступает из Oracle SQL).
Другой вариант заключается в создании транзакционной хранимой процедуры, которая вставляет запись в таблицу первичного ключа, за которой следует запись в справочную таблицу.
Это то, для чего предназначены транзакции. Стандартный SQL не допускает одновременного ввода одного оператора в несколько таблиц. Правильный способ сделать это:
-- begin transaction
insert into table 1 ...
insert into table 2 ...
commit
И 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.
Ваш вопрос не совсем ясно, о том, что конкретная проблема. Я вижу три возможности:
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