我正在使用SQL Server 2K8,並且只有一個表用於生成標識,以便主鍵在多個表中唯一 - 跨多個表的唯一性適用於元素hiearchy樹,無論何種類型,都要求每個節點都有唯一的ID。從臨時表中輸出多個標識列
它只有一個自動增量標識列,我通常使用@@ IDENTITY來提取ID,如果我要逐一插入一條記錄。但是,我試圖優化和批量插入,但首先需要從該表中生成一批ID。
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
棒極了! MERGE再次拯救這一天!我不認爲在不匹配技巧時使用INSERT DEFAULT VALUES,並使用1 = 0來獲取所有行。我還將生成的id輸出到EntityIdTab中,並將ItemIndex作爲標識列,以便我稍後可以使用它作爲與其ItemIndex上的原始NodeTypeATab表的聯合「correlation id」,以使用生成的id更新它的NodeTypeATabId。 – soundslike