我知道使用IDENT_CURRENT
不會總是給我返回正確的標識值(在多線程應用程序中尤其如此)。我想用SCOPE_IDENTITY()
代替。在約束中使用SCOPE_IDENTITY()
例如,這是我的Employee
表:
create table Employee
(
ID int identity(1,1),
Name varchar(20),
SystemID int,
constraint Employee_PK primary key (ID asc)
)
我有如下聲明:
alter table Employee
add constraint Employee_D1 default ident_current('Employee') for SystemID
,我需要修改使用SCOPE_IDENTITY()
來代替。
我嘗試以下:
alter table Employee
add constraint Employee_D1 default SCOPE_IDENITITY() for SystemID
這並沒有給出任何錯誤。但插入一行後,我沒有看到這個列更新了身份值。我究竟做錯了什麼?
請注意,SystemID
不得爲只讀,所以計算字段不是一個選項。
這裏我的練習是在並行進程試圖插入行的情況下,試圖消除在SystemID
中輸入錯誤的IDENTITY
值。
的問題是與IDENT_CURRENT是值,否則使用它應該是安全的,因爲它爲您提供任何會話的最後一個身份值。 SCOPE_IDENTITY只適用於當前會話,我認爲這就是爲什麼你沒有從中獲得價值。 但我不確定你從這個約束中獲得了什麼好處? –
同意Allan - 擁有默認爲「SCOPE_IDENTITY」的列有什麼意義?如果你的表中需要一個唯一的值 - 使用一個'INT IDENTITY'類型的列 - 但是具有相同值的第二列有什麼好處?如果你必須有這樣的事情 - 你需要使用一個'ON INSERT'觸發器...... –
我很困惑 - 'ID'是_already_一個'IDENTITY'列 - 您是否試圖確保'SystemID'總是等於'ID'?或者在其他表格中添加一個「ID」? –