我正在使用 SQL Server 2K8 并且有一个仅用于生成 id 的表,以便主键在多个表中是唯一的 - 多个表之间的唯一性适用于元素层次结构树,它要求每个节点都有一个唯一的 id,而不管类型。
它只有一个自动增量标识列,如果我要一一插入记录,我通常会使用 @@IDENTITY 从中提取 ID。但是,我正在尝试优化并批量执行插入,但首先需要从该表中生成一批 ID。
CREATE TABLE [dbo].[MyTreeElementIDGenTab](
[MyTreeElementID] [int] IDENTITY(1,1) NOT NULL
)
我也知道我可以使用一个while循环/光标,但想知道如果我可以使用sql批处理语句从该表中获取ID,以便在插入实际之前设置在临时表中,是否给出了行数据的临时表桌子。
我在想我可以使用 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