Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как после вставки данных получить сопоставление ID двух таблиц? / 8 сообщений из 8, страница 1 из 1
18.04.2020, 15:43
    #39948598
Как после вставки данных получить сопоставление ID двух таблиц?
Здравствуйте!

Используется MS SQL Server 17. Есть некоторая временная таблица, которая строка которой содержит ID некоторого объекта и другие связанные с этим объектом данные. Из каждой строки этой таблицы формируются строки для вставки в другую таблицу. Вставляемые строки получают там свои ID.
Как по результатам вставки данных получить табличку(или хоть что-угодно), которая будет содержать ID объекта временной таблицы и ID созданной строки для этого объекта во второй таблице?
...
Рейтинг: 0 / 0
18.04.2020, 15:56
    #39948600
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
Примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @t table (id_source int, id_target int);

merge into TargetTable t
using SouceTable s on 1 = 0
when not matched then
 insert
  (...)
 values
  (...)
output
 s.id, inserted.id into @t (id_source, id_target);
...
Рейтинг: 0 / 0
18.04.2020, 18:55
    #39948630
Как после вставки данных получить сопоставление ID двух таблиц?
Спасибо, поизучаю и попробую
...
Рейтинг: 0 / 0
18.04.2020, 19:26
    #39948642
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
invm
Примерно так
В данном случае достаточно INSERT ... OUTPUT ...
Пример из хелпа :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL  
    DROP TABLE dbo.EmployeeSales;  
GO  
CREATE TABLE dbo.EmployeeSales  
( EmployeeID   int IDENTITY (1,5)NOT NULL,  
  LastName     nvarchar(20) NOT NULL,  
  FirstName    nvarchar(20) NOT NULL,  
  CurrentSales money NOT NULL,  
  ProjectedSales AS CurrentSales * 1.10   
);  
GO  
DECLARE @MyTableVar table(  
  EmployeeID   int NOT NULL,  
  LastName     nvarchar(20) NOT NULL,  
  FirstName    nvarchar(20) NOT NULL,  
  CurrentSales money NOT NULL,  
  ProjectedSales money NOT NULL  
  );  
  
INSERT INTO dbo.EmployeeSales (LastName, FirstName, CurrentSales)  
  OUTPUT INSERTED.EmployeeID,
         INSERTED.LastName,   
         INSERTED.FirstName,   
         INSERTED.CurrentSales,
         INSERTED.ProjectedSales
  INTO @MyTableVar  
    SELECT c.LastName, c.FirstName, sp.SalesYTD  
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.BusinessEntityID LIKE '2%'  
    ORDER BY c.LastName, c.FirstName;  
  
SELECT EmployeeID, LastName, FirstName, CurrentSales, ProjectedSales  
FROM @MyTableVar;  
GO  
SELECT EmployeeID, LastName, FirstName, CurrentSales, ProjectedSales  
FROM dbo.EmployeeSales;  
GO  

...
Рейтинг: 0 / 0
18.04.2020, 19:29
    #39948643
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
C чего вы решили, что ID - IDENTITY?? Об этом ничего не говорили.
И какие триггеры у таблицы? От этого тоже многое зависит.
...
Рейтинг: 0 / 0
18.04.2020, 20:06
    #39948657
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
alexeyvg
В данном случае достаточно INSERT ... OUTPUT ...
И как вы будете в output добывать значение ID из таблицы-источника?
...
Рейтинг: 0 / 0
18.04.2020, 21:33
    #39948678
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
invm
alexeyvg
В данном случае достаточно INSERT ... OUTPUT ...
И как вы будете в output добывать значение ID из таблицы-источника?
А что такого? Просто не понимаю вопроса, есть какой то подвох?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @t table(id int identity, name varchar(100))

DECLARE @v table(id int, name varchar(100))

insert @t(name)
OUTPUT INSERTED.id, INSERTED.Name INTO @v
values ('a'), ('s'), ('d'), ('f')

select * from  @t 
select * from  @v
...
Рейтинг: 0 / 0
18.04.2020, 21:45
    #39948682
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как после вставки данных получить сопоставление ID двух таблиц?
invm,

А, из источника... Да, для INSERT это недоступно...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как после вставки данных получить сопоставление ID двух таблиц? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]