私は SQL Server 2K8 を使用しており、主キーが複数のテーブルで一意になるように ID を生成するためだけに使用されるテーブルを持っています。タイプ。
レコードを 1 つずつ挿入する場合、通常は @@IDENTITY を使用して ID を抽出する自動インクリメント ID 列が 1 つしかありません。ただし、バッチで挿入を最適化して実行しようとしていますが、最初にこのテーブルから 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