0

データ型Varchar(MAX)のテーブル変数があります。

最初に値「header」を挿入し、次に内部結合に基づいて、次に「Details」を同じテーブル変数に挿入します。最後に、「予告編」を挿入します。

私が取得している出力は、「ヘッダー」、「トレーラー」、最後に「詳細」の順になっています。

必要な出力は次の順序です。

Header 
Detail
Trailer

しかし、私はこの注文を受けています:

Header
Trailer
Detail

注:選択にasc/descを使用できません。必要な順番で挿入しています。

4

2 に答える 2

6

外部クエリにORDERBYを含めない場合は、SQLServerがあなたの心を読むことを期待しないでください。SQLServerが挿入された順序でデータを返すという保証はありません。と呼ばれるテーブル変数に列を追加する必要があります[rank]。ヘッダーを挿入するときは、詳細行に1を挿入し、2を挿入し、次にトレーラーに3を挿入します。これORDER BY [rank];で、クエリの最後に追加して、予測可能な結果を​​得ることができ、誰もが満足しています。

于 2012-06-11T16:27:44.313 に答える
2

SQLデータベースは、実際には、どのような順序でデータを配置したか、またはデータを特定の順序で格納したかを理解していません。必要な順序が保持されるように、使用する値を持つテーブルの2番目の列が必要になる場合があります。

友達に何かを渡して持ってもらうようなものだと考えてください。彼女は後ですべてを手に入れますが、その間にどこかに保管します。彼女はあなたが何か他のもののために場所を空けることを探していない間にそれを動かしたり、あなたが彼女に与えたのと同じ順序でそれを返すかもしれませんが、あなたはそれを整頓するように彼女に言わなかったので、彼女はしません。

データベースはバックグラウンドで物事を移動できる必要があるため、データベースの構築方法は本質的に順序を認識しません。データベースに渡すときに順序を認識して、データベースに戻すことができるようにする必要があります。後で欲しい注文。order句を使用すると、SQLはデータに順序を課すことができますが、それ自体は順序を記憶していないか、持っていません。

于 2012-06-11T17:51:05.773 に答える