非常によく似た 質問
ORDER BY
を指定できます INSERT
で .
そうすると、 IDENTITY
が 生成される値は、指定された ORDER BY
と一致することが保証されます INSERT
で .
あなたの例を使用して:
DECLARE @blah TABLE
(
ID INT IDENTITY(1, 1) NOT NULL,
Name VARCHAR(100) NOT NULL
);
INSERT INTO @blah (Name)
SELECT T.Name
FROM
(
VALUES
('Timmy'),
('Jonny'),
('Sally')
) AS T(Name)
ORDER BY T.Name;
SELECT
T.ID
,T.Name
FROM @blah AS T
ORDER BY T.ID;
結果は次のとおりです。
+----+-------+
| ID | Name |
+----+-------+
| 1 | Jonny |
| 2 | Sally |
| 3 | Timmy |
+----+-------+
つまり、Name
ソートされ、この順序に従って ID が生成されました。 Jonny が最も低い ID、Timmy が最も高い ID、Sally がそれらの間の ID を持つことが保証されています。生成された ID 値の間にギャップがある場合がありますが、それらの相対的な順序は保証されています。
ORDER BY
を指定しない場合 INSERT
で 、結果の IDENTITY
ID は別の順序で生成できます。
ORDER BY
を使用しても、テーブル内の行の実際の物理的な順序は保証されません。 INSERT
で 、唯一の保証は生成された ID です。
質問 ORDER BY を使用した SELECT としての INSERT INTO MS の Umachandar Jayachandran は次のように述べています。
そして、彼は 注文へのリンクを提供しましたSQL Server での保証 、SQL Server Engine Team の Conor Cunningham は次のように述べています。
その投稿のコメントに、MS ナレッジ ベース記事へのリンクがあります: SELECT INTO または INSERT で使用する場合の IDENTITY 関数 .. ORDER BY 句を含む SELECT クエリ で詳しく説明しています。それは言う:
この KB 記事を公式ドキュメントと見なし、この動作が保証されていると考えます。