8

我有一张桌子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,但我需要将行按顺序插入到表中。

4

3 回答 3

13

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

于 2012-08-01T15:42:09.347 回答
7

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

请参阅SQL Server 中 Oracle 的 RowID 的等效项

于 2013-12-13T13:53:26.820 回答
2

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

于 2012-08-01T15:38:14.403 回答