私はSQL Server 2K8を使用しており、プライマリキーが複数のテーブルにわたって一意であるようにIDを生成するためにテーブルを使用しています - 複数のテーブルにわたる一意性は、タイプに関係なく、各ノードに一意のIDが必要です。一時テーブルから複数のID列を出力
これは、レコードを1つずつ挿入する場合、IDを抽出するために通常は@@ IDENTITYが使用される1つの自動インクリメントID列しかありません。しかし、私はバッチで挿入を最適化して実行しようとしていますが、まずこのテーブルからIDのバッチを生成する必要があります。
CREATE TABLE [dbo].[MyTreeElementIDGenTab](
[MyTreeElementID] [int] IDENTITY(1,1) NOT NULL
)
はまた、私は、私はwhileループ/カーソルを使用することができます知っているが、行データの一時テーブルを指定した場合、私は中に設定するには、このテーブルからIDを取得するには、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
恐ろしいソース!もう一度救うためにマージ!トリックにマッチしないときにINSERT DEFAULT VALUESを実行するとは思わなかったし、すべての行を取得するために1 = 0を使う。生成されたIDをEntityIdTabに出力し、ItemIndexをID列にしたので、後で元のNodeTypeATabテーブルとの結合「相関ID」としてItemIndexを使用してNodeTypeATabIdを生成IDで更新することができます。 – soundslike