我的经理要求我向表AutoID
添加UserTracking
列,以便可以使用值填充所有现有条目,并且此列的顺序与CreateDate
字段(即ID
1)位于最早的条目中。
我这样做了:
alter table dbo.UserTracking add AutoID bigint NULL
go
update dbo.UserTracking
set AutoId=AutoId.AutoId
from dbo.UserTracking as ut
join
(
select CreateDate,row_number() over (order by CreateDate) as AutoId
from UserTracking
) as AutoId
on ut.CreateDate=AutoId.CreateDate
go
create index IDX__UserTracking__AutoId on dbo.UserTracking (AutoId)
go
但我被告知我们需要AutoID
列为实际自动ID
(因此它在记录插入时具有自动新值)并且应该将其称为ID
与其他表格一致。
从性能的角度来看,如果新的ID (INT)
列是我们的主键,那将是完美的,但它可能很难做到。现在我们需要带有索引的自动ID
。
我不完全确定如何自己做,我也不想搞砸它。有人可以帮忙吗?
答案 0 :(得分:3)
删除现有列(AutoID),不能使现有列成为Identity列。
只需添加另一列并将其设为Identity列。
ALTER TABLE dbo.UserTracking
ADD ID INT IDENTITY(1,1)
GO
它将填充列本身,您不必做任何事情。