Объединить OUTPUT вставленный.ид со значением из выбранной строки
БегSQL Server 2014
, Как я могу вставить несколько строк из таблицы и объединить вставленные данные с новыми идентификаторами?
Давайте посмотрим на урезанный пример!
DECLARE @Old TABLE
(
[ID] [int] PRIMARY KEY,
[Data] [int] NOT NULL
)
DECLARE @New TABLE
(
[ID] [int] PRIMARY KEY,
[OtherID] [int] NULL
)
INSERT INTO [dbo].[Test] ([Data])
OUTPUT inserted.[ID], [@Old].[ID] /* <--- not supported :( */ INTO @New
SELECT [Data]
FROM @Old
Мне нужно объединить вставленные идентификаторы с данными, которые вставляются. Можно ли предположить, что вставленные строки находятся в том же порядке, что и выбранные строки? (Я не смогу присоединиться к[Data]
после операции вставки.)
Следующее представляется возможным решением, но я не могу найти доказательств того, что оно работает. Это гарантированно работает?
DECLARE @Old TABLE
(
[RowID] [int] PRIMARY KEY IDENTITY, -- Guaranteed insert order?
[ID] [int] NOT NULL,
[Data] [int] NOT NULL
)
DECLARE @New TABLE
(
[RowID] [int] PRIMARY KEY IDENTITY, -- Guaranteed insert order?
[ID] [int] NOT NULL,
[OtherID] [int] NULL
)
INSERT INTO [dbo].[Test] ([Data])
OUTPUT inserted.[ID] INTO @New
SELECT [Data]
FROM @Old
ORDER BY [RowID]
Хитрость заключается в том, чтобы использовать отдельныйidentity
столбец иORDER BY
для выбранных строк, а затемприсоединиться к RowID
.