Я использую SQL Server 2K8, и у меня есть таблица, используемая исключительно для генерации идентификаторов, так что первичный ключ уникален для нескольких таблиц - уникальность для нескольких таблиц для дерева иерархии элементов, которое требует, чтобы у каждого узла был уникальный идентификатор независимо от типа.
У него есть только один столбец идентификаторов с автоинкрементом, из которого я обычно использовал @@ IDENTITY для извлечения идентификатора, если бы мне нужно было вставить запись одну за другой. Тем не менее, я пытаюсь оптимизировать и сделать вставки в пакете, но сначала нужно сгенерировать пакет идентификаторов из этой таблицы.
CREATE TABLE [dbo].[MyTreeElementIDGenTab](
[MyTreeElementID] [int] IDENTITY(1,1) NOT NULL
)
Также я знаю, что мог бы использовать цикл while / курсор, но мне было интересно, если бы я дал временную таблицу данных строки, если бы я мог использовать пакетный оператор sql, чтобы получить идентификаторы из этой таблицы для установки во временную таблицу перед вставкой в фактическую таблицу.
Я думал, что мог бы использовать ROW_NUMBER () для генерации индекса и поместить соответствующий индекс в исходную таблицу, но не добился никакого прогресса. Любая помощь приветствуется!
DECLARE @NodeTypeATab TABLE
(
NodeTypeATabId INT NULL, -- To be populated by dbo.MyTreeElementIDGenTab
Name NVARCHAR(MAX),
ItemIndex INT NOT NULL -- I can initially populate this from the client starting
-- with Index # 1 for joining but maybe I don't need it?
)
-- Populate @NodeTypeATab with test data here
DECLARE @EntityIdTab TABLE
(
ElementId INT NOT NULL,
ItemIndex INT NOT NULL
)
-- This below doesn't compile to generate a new ElementId to later be set in NodeTypeATabId above
-- I want to output the generated ID into the temp table but also have a "correlation/index ID" to set
-- back in the original table or some way if not via a correlation/index ID
INSERT INTO dbo.MyTreeElementIDGenTab DEFAULT VALUES
OUTPUT INSERTED.MyTreeElementID, ROW_NUMBER() OVER(ORDER BY MyTreeElementID ASC) INTO @EntityIdTab
FROM @NodeTypeATab