我有一个表CSBCA1_5_FPCIC_2012_EES207201222743
,有两列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
的升序返回行,但是我需要将这些行按顺序插入到表中。
答案 0 :(得分:12)
SQL Server不跟踪插入行的顺序,因此在给定当前表结构的情况下,没有可靠的方法来获取该信息。即使employee_id
是IDENTITY
列,依靠插入顺序也不是100%万无一失(因为您可以填充空白,甚至可以使用SET IDENTITY_INSERT ON
创建重复的ID值)。如果employee_id
是IDENTITY
列和,您确定不会无序地手动插入行,您应该能够使用查询的这种变体来选择顺序数据,最新的第一个:
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()
的现有代码 - 例如您可能必须重新访问代码并定义正确的显式列列表。
答案 1 :(得分:6)
有一个名为%% physloc %%的伪列,显示行的物理地址。
答案 2 :(得分:2)
SQL不会这样做。表中元组的顺序不按插入日期排序。很多人都包含一个存储插入日期的列,以解决此问题。