2015-04-19 61 views
0

我的經理詢問我向列表UserTracking添加了一個AutoID列,以便所有現有的條目都可以填充一個值,並且與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

我不完全確定如何自己做,我不想搞砸了。有人可以幫忙嗎?

回答

3

刪除現有列(AutoID),不能使現有列成爲標識列。

只需添加另一列並將其設置爲標識列即可。

ALTER TABLE dbo.UserTracking 
ADD ID INT IDENTITY(1,1) 
GO 

它會填充列本身,你不必做任何事情。

+0

謝謝M.Ali!現在看來很明顯,你指出了這一點。 – Will

+1

請注意,現有行的ID不一定與CreateDate相關。如果您需要使用新的標識列進行回填,則需要使用'SELECT INTO ... ORDER BY CreateDate'。 –