1つのテーブルCSBCA1_5_FPCIC_2012_EES207201222743
があり、2つの列employee_id
とemployee_name
があります。
次のクエリを使用しました
SELECT ROW_NUMBER() OVER (ORDER BY EMPLOYEE_ID) AS ID, EMPLOYEE_ID,EMPLOYEE_NAME
FROM CSBCA1_5_FPCIC_2012_EES207201222743
しかし、employee_id
の昇順で行を返しますが、テーブルに挿入された順に行が必要です。
SQL Serverは挿入された行の順序を追跡しないため、現在のテーブル構造が与えられた場合にその情報を取得する確実な方法はありません。 _employee_id
_がIDENTITY
列である場合でも、挿入の順序をそれに頼ることは100%確実ではありません(ギャップを埋め、_SET IDENTITY_INSERT ON
_を使用して重複したID値を作成することもできるため) 。 _employee_id
_がIDENTITY
列である場合and行が手動で間違って挿入されていないことが確実な場合、このクエリのバリエーションを使用して選択できるはずです。最新のデータから順番に:
_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()
を実行するだけの既存のコードを破壊する可能性があることに注意してください。コードを再検討して、適切な明示的な列リストを定義する必要がある場合があります。
行の物理アドレスを示す%% physloc %%と呼ばれる疑似列があります。
SQL ServerのOracleのRowIDに相当 を参照してください
SQLはそれを行いません。テーブル内のタプルの順序は、挿入日順ではありません。多くの人は、この問題を回避するために、挿入の日付を格納する列を含めます。