如何在sql server中获取行的行ID

时间:2012-08-01 15:35:55

标签: sql sql-server-2005 rowid

我有一个表CSBCA1_5_FPCIC_2012_EES207201222743,有两列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的升序返回行,但是我需要将这些行按顺序插入到表中。

3 个答案:

答案 0 :(得分:12)

SQL Server不跟踪插入行的顺序,因此在给定当前表结构的情况下,没有可靠的方法来获取该信息。即使employee_idIDENTITY列,依靠插入顺序也不是100%万无一失(因为您可以填充空白,甚至可以使用SET IDENTITY_INSERT ON创建重复的ID值)。如果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()的现有代码 - 例如您可能必须重新访问代码并定义正确的显式列列表。

答案 1 :(得分:6)

有一个名为%% physloc %%的伪列,显示行的物理地址。

请参阅Equivalent of Oracle's RowID in SQL Server

答案 2 :(得分:2)

SQL不会这样做。表中元组的顺序不按插入日期排序。很多人都包含一个存储插入日期的列,以解决此问题。