8

私は1つのテーブルCSBCA1_5_FPCIC_2012_EES207201222743を持ち、2つの列employee_idemployee_name

私は次のクエリを使用しました

SELECT ROW_NUMBER() OVER (ORDER BY EMPLOYEE_ID) AS ID, EMPLOYEE_ID,EMPLOYEE_NAME 
FROM CSBCA1_5_FPCIC_2012_EES207201222743 

ただし、行は昇順で返されますがemployee_id、テーブルに挿入された順序で行が必要です。

4

3 に答える 3

13

SQL Serverは挿入された行の順序を追跡しないため、現在のテーブル構造でその情報を取得する信頼できる方法はありません。employee_idが列であってもIDENTITY、挿入の順序を100%確実に信頼できるわけではありません(ギャップを埋めたり、を使用して重複するID値を作成したりできるためSET IDENTITY_INSERT ON)。employee_idIDENTITYであり、行が手動で順不同に挿入されていないことが確実な場合は、クエリのこのバリエーションを使用して、最新のデータを順番に選択できるはずです。

SELECT 
   ROW_NUMBER() OVER (ORDER BY EMPLOYEE_ID DESC) AS ID, 
   EMPLOYEE_ID,
   EMPLOYEE_NAME 
FROM dbo.CSBCA1_5_FPCIC_2012_EES207201222743
ORDER BY ID;

テーブルに変更を加えて新しい行のこの情報を追跡することはできますが、既存のデータからこの情報を取得することはできません(この変更を行うと、すべての情報が挿入済みとしてマークされます)。

ALTER TABLE dbo.CSBCA1_5_FPCIC_2012_EES207201222743 
-- wow, who named this?
  ADD CreatedDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

これにより、既存のコードが破損する可能性があることに注意してくださいINSERT INTO dbo.whatever SELECT/VALUES()。たとえば、コードを再検討して、適切で明示的な列リストを定義する必要がある場合があります。

于 2012-08-01T15:42:09.347 に答える
2

SQLはそれを行いません。表内のタプルの順序は、挿入日順に並べられていません。多くの人が、この問題を回避するために、その挿入日を格納する列を含めています。

于 2012-08-01T15:38:14.403 に答える