Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как во время INSERT'а проставить связи с существующими данными?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4339
Table_A:
ID Name
1 Пётр
4 Иван
7 Николай

Table_B:
ID Name

Table_A_B
ID_A ID_B


Выполняю
INSERT INTO Table_B(Name)
SELECT Name
FROM Table_A
WHERE какие-нибудь условия, чтобы скопировалось не всё, а только нужная часть


Задача: одновременно с этим запросом должны заполниться две таблицы:

Table_B:
ID Name
21 Пётр
22 Иван
23 Николай

Table_A_B
ID_A ID_B
1 21
4 22
7 23

Как? Нужно просто скопировать данные из одной таблицы в другую и настроить связи между ними в третьей таблице, которая реализует логику "многие ко многим".
20 дек 18, 18:16    [21769970]     Ответить | Цитировать Сообщить модератору
 Re: Как во время INSERT'а проставить связи с существующими данными?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4339
А, принцип понял.
Как всегда - искал-искал, а как только опубликовал, нашёл ответ
https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017
20 дек 18, 18:38    [21769992]     Ответить | Цитировать Сообщить модератору
 Re: Как во время INSERT'а проставить связи с существующими данными?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4339
хотя всё равно не понятно... output вернёт мне просто кучу изменённых данных.
20 дек 18, 18:42    [21769994]     Ответить | Цитировать Сообщить модератору
 Re: Как во время INSERT'а проставить связи с существующими данными?  [new]
aleks222
Member

Откуда:
Сообщений: 929
declare @A table( id int identity, N nvarchar(32));

declare @B table( id int identity(-1, -1), N nvarchar(32));

declare @AB table( idA int, idB int);

declare @tmp table( id int, N nvarchar(32));

delete @tmp;

insert @A
  output inserted.id, inserted.N into @tmp(id, N)
  values(N'Пётр'), (N'Иван')
;

merge @b as b using @tmp as x on 1=2
  when not matched then insert(n) values(n)
  output x.id, inserted.id into @AB(idA, idB) 
;

select * from @A;

select * from @B;

select * from @AB;
20 дек 18, 19:07    [21770011]     Ответить | Цитировать Сообщить модератору
 Re: Как во время INSERT'а проставить связи с существующими данными?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4339
очень круто!!!
21 дек 18, 17:52    [21770743]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить