Выбор данных из одной таблицы при сохранении (вставке) в две? - PullRequest
0 голосов
/ 19 января 2010

Я хочу скопировать данные в новую базу данных. Однако в процесс, в который должны быть помещены данные, включена еще одна таблица.

Старый стол:

DB1. dbo. pages (идентификатор, заголовок, содержание)

Новые таблицы:

DB2. dbo. Page (id)
DB2. dbo. Content (id, pageid, title, content)

Как выбрать все данные из pages при разделении / сохранении в Page и Content?

Ответы [ 4 ]

1 голос
/ 19 января 2010

Да, можно связать две вставки , используя предложение OUTPUT:

установка:

create table Page (id int )
create table Content (id int , pageid int, title varchar(100), content varchar(max))

create table pages (id int, title varchar(100), content varchar(max))

insert into pages values (1, 'Lorem', 'Ipsum');
insert into pages values (2, 'eum', 'aliquam vivendo placerat ad');

Фактическая вставка:

insert into Content (id, pageid, title, content)
output inserted.pageid into Page(id)
select id, id, title, content from pages;

Доказательство:

select * from Page;
select * from Content;

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

1 голос
/ 19 января 2010

что такое pageid?является ли идентификатор страницы Page?

Если это так, и предполагается, что идентификатор в таблице содержимого является идентификатором

insert into DB2.dbo.Page (id)
select id from DB1.dbo.pages

insert into DB2.dbo.Content(pageid, title, content)
select id, title, content from DB1.dbo.pages

Все еще немного озадачен этим дизайном

0 голосов
/ 19 января 2010

Не можете ли вы сделать это с двумя отдельными запросами?Сделайте это следующим образом:

Вставьте в db2.dbo.page Выберите идентификатор из db1.dbo.pages

И:

Вставьте в db2.dbo.content (id_page, title, content) Выберите id, title, content из db1.dbo.pages

Я думаю, это должно работать.

0 голосов
/ 19 января 2010

Не возможно напрямую.Если ваш выбор дорог, вы можете добавить его во временную таблицу, а затем вставить в финальные таблицы внутри транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...