如何控制SQL Server中新标识列的赋值顺序?

alp*_*pav 5 sql t-sql sql-server identity sql-server-2005

我有一个表CreateDate datetime字段default(getdate())不具有任何标识列.

我想添加一个identity(1,1)字段,它将现有记录的顺序与CreateDate字段order by相同(会产生相同的结果).我怎样才能做到这一点?

我想如果我在CreateDate字段上创建聚簇键然后添加标识列它将起作用(不确定它是否有保证),是否有一个好/更好的方法?

我对SQL Server 2005感兴趣,但我想SQL Server 2008,SQL Server 2000的答案是相同的.

gbn*_*gbn 8

根据Remus的理论答案......你需要先按照理想的顺序生成一个列表

SELECT
    ID, CreateDate
INTO
    MyNewTable
FROM
    (
    SELECT
        CreateDate,
        ROW_NUMBER() OVER (ORDER BY CreateDate ASC) AS ID
    FROM
        MyTable
    ) foo
Run Code Online (Sandbox Code Playgroud)

然后,最好的解决方案是使用SSMS将IDENTITY属性添加到MyNewTable.SSMS将生成一个包含SET IDENTITY INSERT的脚本以保留订单

注意:IDENTITY列只是没有隐含含义的数字,在本练习之后,它们与CreateDate的对齐不能推断出任何内容......