2

インターネット上のさまざまな情報源から、次の sql を理解しています。

insert into mainTable(status)
output inserted.mainid into tmpTable(TARGET_ID)
select '0' from impTable
order by impid asc;

mainTable ID 列 (mainid) の値は正しい順序になりますが、行が select ステートメントの「order by」で指定された順序で mainTable に挿入されることは保証されません。

私の質問は、これがtmpTableに出力されるinserted.mainidにどのように影響するかです。行が mainTable に挿入される順序で tmpTable に追加されますか、それとも、生成された mainid ID 値のシーケンスに従いますか?

SQL の有用性は気にしないでください。これは技術的な問題です。

編集: SQL の例での列の不一致を修正しました

4

3 に答える 3

2

コメントmainidで述べているようIDENTITYに、その値は単調に増加しますが、挿入する値はからのものではないため、impTableこれがどのように重要かわかりません。

新しいものmainIdがそれぞれ に挿入されtmpTableます。データは のクラスター化インデックスの順序で格納されます。クラスター化インデックスがないtmpTable場合tmpTable、順序は未定義です。パフォーマンス上の理由を除いて、これはどちらの方法でも問題ありません。を指定しない限り、結果の順序からデータを選択するtmpTableと不定になりますORDER BY

于 2013-03-08T10:48:13.617 に答える
1

その順序を観察できないため、行がテーブルに格納されている順序は問題ではありません。順序なしで選択する場合order byは未定義であり、保存されている順序とは必ずしも一致しません。そのため、保存された順序は無意味です。

「すべての行を順番に並べてください」と言う方法はありません。あなたが言うことができるのは、「好きな順序でそれらを返す」または「この正確な順序でそれらを返す」ことだけです.

于 2013-03-08T10:59:09.137 に答える
0

順番を知る方法はありません。

MSDN のこのページ ( http://msdn.microsoft.com/en-us/library/ms177564.aspx ) を見ると、次のステートメントが見つかります。

「変更がテーブルに適用される順序と、行が出力テーブルまたはテーブル変数に挿入される順序が一致するという保証はありません。」

于 2013-03-11T07:22:59.943 に答える