2017-11-01 4 views
1

私はSortOrderの列を持つ一時テーブルを持っています。SQLサーバーの並べ替えのテンポラリテーブル

INSERT INTO #MainCalcTemp 
    SELECT 
     ItemId, ItemDesc, Quantity, Rate, Frequency, 
     Annual, BasedOn, ProductCode, CalculationID, SortOrder 
    FROM 
     OneTimeFeesDocTemplate 
    ORDER BY 
     SortOrder ASC 

を挿入しながら、当初のデータを挿入しながら、私はデータを並べ替える今私は、私はSortOrder = 2で項目を追加したSQL

INSERT INTO #MainCalcTemp 
    SELECT 
     ItemID, ItemDesc, quantity, Rate, '', Annual, '', 'PHR', '', 2 
    FROM 
     #PackageInfoPHR 
    WHERE 
     ItemID IN ('1PHR', '2PHR', '3PHR', '4PHR', '5PHR', '6PHR', '7PHR', '8PHR', '9PHR', '10PHR') 

の下に使用し、それに動的にいくつかのデータを追加します。手動で追加している追加項目が一番上に出てくるので、ソートされた方法でデータを出力するためにストアドプロシージャ内で#MainCalcTempテーブルを再度ソートする必要があります。

ストアドプロシージャ内の一時テーブルをオンデマンドで並べ替える方法を教えてもらえますか?私が追加する新しいアイテムは2番で表示され、トップには表示されません。もう一度ソートしてください。 thatを知られた

おかげ

+2

あなたは、リレーショナル・データベース内のユーザーテーブルに –

+5

を使用すると、あなたがいない*ソート*テーブル自体することができますすることで、通常の順序を使用することができますBY'データを取得するとき –

+1

marc_sが示していることに加えて、特定の順序でテーブルに挿入することはできません。 'INSERT INTO ... SELECT ... ORDER BY'ステートメントの' ORDER BY'節は無視されます。 –

答えて

0

:テーブルにはクラスタ化インデックスが含まれている場合

は、テーブル内のデータ行がソートされた順序に格納されている唯一の時間が です。テーブルに クラスタ化インデックスがある場合、そのテーブルはクラスタ化テーブルと呼ばれます。テーブルに クラスタ化インデックスがない場合、そのデータ行はヒープと呼ばれる順序付けられていない構造体 に格納されます。

これは、特定の形式で行を保存する場合、クラスタ化された表を作成する必要があることを意味します。

テーブルに挿入された最後の行の値よりも常に大きい値を必要とし、列を見ればそのような値はないようです。あなたの定義するために次の各今

CREATE TABLE #MainCalcTemp 
(
    [RowID] INT IDENTITY(100,1) 
    ,... 
); 

、行が挿入されます:私たちは何ができるか

は、列IDENTITYを(クラスタ化されたとして、それがマークされ、デフォルトでは)PRIMARY KEYあなたのテーブルに追加することです時間。

あなたはそれを行う必要がありますか?最も一般的に実行されたクエリが最適化される形式でデータを格納するより意味のあるPRIMARY KEYを持つ方がよいでしょう。トピックは長く、hereの基本を見つけることができます。

。なお、:

  1. あなたは、データが
  2. を読んでいるときT-SQLでテーブルがリレーションを表現することになっている行を必ず注文することができます。リレーションはセットであり、セットはそのエレメントに対して順序がありません。ソートされた結果セットを取得する唯一の方法は、明示的な `ORDERを使用することです -
+0

しかし、クラスタ化インデックスの順番でレコードが返されるという保証はありません。selectに 'order by'を追加しない限り –

関連する問題