我有一个带有 CreateDate datetime
字段 default(getdate())
的表,但没有任何标识列。
我想添加 identity(1,1)
字段,该字段将反射(reflect)与 CreateDate
字段相同的现有记录顺序(order by
会给出相同的结果)。我怎样才能做到这一点?
我想如果我在 CreateDate
字段上创建聚集键,然后添加标识列,它将起作用(不确定是否保证),有没有好的/更好的方法?
我对 SQL Server 2005 感兴趣,但我想 SQL Server 2008、SQL Server 2000 的答案是相同的。
最佳答案
根据 Remus 的理论回答...您需要首先根据理想的顺序生成一个列表
SELECT
ID, CreateDate
INTO
MyNewTable
FROM
(
SELECT
CreateDate,
ROW_NUMBER() OVER (ORDER BY CreateDate ASC) AS ID
FROM
MyTable
) foo
那么,最好的解决方案是使用SSMS将IDENTITY属性添加到MyNewTable中。 SSMS 将生成一个包含 SET IDENTITY INSERT 的脚本保留顺序
注意:IDENTITY 列只是没有隐含含义的数字,在本练习之后,不应通过它们与 CreateDate 的对齐来推断任何内容...
关于sql - 如何控制 SQL Server 中新标识列的分配顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450054/