IDを使用して複数の行を挿入する場合、順序は保証されますか?

ファリロン

テーブルに複数の行を挿入する場合、指定した順序で行が入るという保証はありますか?たとえば、次のようにします。

DECLARE @blah TABLE
(
    ID INT IDENTITY(1, 1),
    Name VARCHAR(100) NOT NULL
);

INSERT INTO @blah (Name)
    VALUES('Timmy'),
    ('Jonny'),
    ('Sally');

SELECT * FROM @blah

Sallyより高い主キーを持つ保証はありますTimmyか?

ウラジミールバラノフ

非常によく似た質問が以前に尋ねられました。

あなたは指定することができます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が生成されています。ジョニーが最低のIDを持ち、ティミーが最高のIDを持ち、サリーがそれらの間にIDを持つことが保証されます。生成されたID値の間にギャップがある可能性がありますが、それらの相対的な順序は保証されています。

指定しない場合ORDER BYではINSERT、その結果のIDENTITYIDが異なるために発生することができます。

断っておくが、でもとのテーブル内の行の実際の物理的な順序のための保証はありませんORDER BYINSERT、唯一の保証は生成されたIDです。

質問の中で、MSのUmachandarJayachandranによるORDERBYでSELECTとしてINSERTINTOは次のように述べています。

唯一の保証は、ID値がORDERBY句に基づいて生成されることです。ただし、テーブルへの行の挿入順序は保証されません。

そして、彼はSQLServerの注文保証へのリンクを提供しました。SQLServerEngineTeamのConorCunninghamは次のように述べています。

  1. SELECTとORDERBYを使用して行にデータを入力するINSERTクエリは、ID値の計算方法を保証しますが、行が挿入される順序は保証しません。

その投稿のコメントには、MSナレッジベースの記事へのリンクがあります。SELECTINTOまたはINSERTで使用した場合のIDENTITY関数の動作..ORDERBY句を含むSELECTクエリ。詳細を説明しています。それは言う:

IDENTITYの順序に従って値を順番に割り当てる場合ORDER BYは、IDENTITYプロパティを含む列を含むテーブルを作成してINSERT ... SELECT ... ORDER BYからクエリを実行してこのテーブルにデータを入力します。

私はこのKB記事を公式ドキュメントと見なし、この動作が保証されていると見なします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

std :: any_ofは、順次実行ポリシーで使用される場合、反復の順序を保証しますか?

分類Dev

C ++ 11:unordered_map / setは、挿入順序としての移動順序を保証しますか?

分類Dev

List <T>は挿入順序を保証しますか?

分類Dev

'then ..'メソッドを使用したチェーンが含まれていない場合、CompletableFutureの順序は保証されますか?

分類Dev

Pythonリストは、要素が挿入された順序のままであることを保証されていますか?

分類Dev

複数のActionFilterAttributeの実行順序が保証されていますか?

分類Dev

同じタスクに対して複数のawait式を再開する順序は保証されていますか?

分類Dev

std::env::args の順序は、複数の呼び出しで一貫性を保つことが保証されていますか?

分類Dev

1つのキーで複数のファイルを送信する場合、JavaScriptフォームデータは挿入順序を維持しますか?

分類Dev

NSMutableArray insertObjects:atIndexesを使用して、複数のアイテムを異なる順序で挿入できますか?

分類Dev

缶FairSyncは、実行の順序を保証しますか?

分類Dev

複数のスレッドがロックでブロックされている場合、どの順序で実行を再開しますか?

分類Dev

CTEが何度も参照される場合、SQLのrow_numberの順序は保証されますか?

分類Dev

Observableの場合、サブスクライブの順序は通知の順序と同じであることが保証されていますか?

分類Dev

SQLiteAsyncConnectionは複数の行を順番に挿入しますか?

分類Dev

Kafkaからポーリングする場合、レコードの順序は保証されますか?

分類Dev

HashMapに新しいキーと値のペアを追加するときに、挿入順序はどのような場合に変更されますか?

分類Dev

HashMapを使用する場合、値とキーは反復時に同じ順序になることが保証されますか?

分類Dev

受信側のAzure関数が停止した場合、ServiceBusはどのようにしてFIFOの順序を保証できますか?

分類Dev

SQL別のテーブルから返されたIDごとに複数の行を挿入する(そのIDの行が存在しない場合)

分類Dev

jdbcTemplate query()は結果セットの順序を維持することが保証されていますか?

分類Dev

KotlinのmapIndexedは順序を保持することが保証されていますか

分類Dev

maps:from_listは逆の順序を維持することが保証されていますか?

分類Dev

Python3の* argsは順序を維持することが保証されていますか?

分類Dev

関数の引数が解決される順序は保証されていますか?

分類Dev

Spark DataFrame:withColumnの順序は保証されていますか?

分類Dev

欠落している文字列を複数の順序付けられた列に挿入します

分類Dev

辞書が変更されていない場合、Dictionary.Keysの順序は同じであることが保証されていますか?

分類Dev

JavaScriptでの割り当てなしの実行順序を保証しますか?

Related 関連記事

  1. 1

    std :: any_ofは、順次実行ポリシーで使用される場合、反復の順序を保証しますか?

  2. 2

    C ++ 11:unordered_map / setは、挿入順序としての移動順序を保証しますか?

  3. 3

    List <T>は挿入順序を保証しますか?

  4. 4

    'then ..'メソッドを使用したチェーンが含まれていない場合、CompletableFutureの順序は保証されますか?

  5. 5

    Pythonリストは、要素が挿入された順序のままであることを保証されていますか?

  6. 6

    複数のActionFilterAttributeの実行順序が保証されていますか?

  7. 7

    同じタスクに対して複数のawait式を再開する順序は保証されていますか?

  8. 8

    std::env::args の順序は、複数の呼び出しで一貫性を保つことが保証されていますか?

  9. 9

    1つのキーで複数のファイルを送信する場合、JavaScriptフォームデータは挿入順序を維持しますか?

  10. 10

    NSMutableArray insertObjects:atIndexesを使用して、複数のアイテムを異なる順序で挿入できますか?

  11. 11

    缶FairSyncは、実行の順序を保証しますか?

  12. 12

    複数のスレッドがロックでブロックされている場合、どの順序で実行を再開しますか?

  13. 13

    CTEが何度も参照される場合、SQLのrow_numberの順序は保証されますか?

  14. 14

    Observableの場合、サブスクライブの順序は通知の順序と同じであることが保証されていますか?

  15. 15

    SQLiteAsyncConnectionは複数の行を順番に挿入しますか?

  16. 16

    Kafkaからポーリングする場合、レコードの順序は保証されますか?

  17. 17

    HashMapに新しいキーと値のペアを追加するときに、挿入順序はどのような場合に変更されますか?

  18. 18

    HashMapを使用する場合、値とキーは反復時に同じ順序になることが保証されますか?

  19. 19

    受信側のAzure関数が停止した場合、ServiceBusはどのようにしてFIFOの順序を保証できますか?

  20. 20

    SQL別のテーブルから返されたIDごとに複数の行を挿入する(そのIDの行が存在しない場合)

  21. 21

    jdbcTemplate query()は結果セットの順序を維持することが保証されていますか?

  22. 22

    KotlinのmapIndexedは順序を保持することが保証されていますか

  23. 23

    maps:from_listは逆の順序を維持することが保証されていますか?

  24. 24

    Python3の* argsは順序を維持することが保証されていますか?

  25. 25

    関数の引数が解決される順序は保証されていますか?

  26. 26

    Spark DataFrame:withColumnの順序は保証されていますか?

  27. 27

    欠落している文字列を複数の順序付けられた列に挿入します

  28. 28

    辞書が変更されていない場合、Dictionary.Keysの順序は同じであることが保証されていますか?

  29. 29

    JavaScriptでの割り当てなしの実行順序を保証しますか?

ホットタグ

アーカイブ