powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как после вставки данных получить сопоставление ID двух таблиц?
8 сообщений из 8, страница 1 из 1
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948598
Здравствуйте!

Используется MS SQL Server 17. Есть некоторая временная таблица, которая строка которой содержит ID некоторого объекта и другие связанные с этим объектом данные. Из каждой строки этой таблицы формируются строки для вставки в другую таблицу. Вставляемые строки получают там свои ID.
Как по результатам вставки данных получить табличку(или хоть что-угодно), которая будет содержать ID объекта временной таблицы и ID созданной строки для этого объекта во второй таблице?
...
Рейтинг: 0 / 0
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948600
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так
Код: 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
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948630
Спасибо, поизучаю и попробую
...
Рейтинг: 0 / 0
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948642
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948643
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C чего вы решили, что ID - IDENTITY?? Об этом ничего не говорили.
И какие триггеры у таблицы? От этого тоже многое зависит.
...
Рейтинг: 0 / 0
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948657
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
В данном случае достаточно INSERT ... OUTPUT ...
И как вы будете в output добывать значение ID из таблицы-источника?
...
Рейтинг: 0 / 0
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948678
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как после вставки данных получить сопоставление ID двух таблиц?
    #39948682
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

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


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