2017-08-17 705 views
0

我想創建一個表稱爲配置文件ID計算列,但是當我試試這個:SQL - 只有UNIQUE或PRIMARY KEY約束可以對計算列創建

CREATE TABLE Profiles 
(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [profileID] AS ((id * 19379 - 62327) % 99991) NOT NULL 
) 

然而,當我轉到創建,我得到這個錯誤:

Only UNIQUE or PRIMARY KEY constraints can be created on computed columns, while CHECK, FOREIGN KEY, and NOT NULL constraints require that computed columns be persisted.

我試圖在配置文件ID線調整到這個

[profileID] as ((id * 19379 - 62327) % 99991) NOT NULL UNIQUE 

乙我仍然得到同樣的錯誤。

僅供參考我有另一列稱爲id和它的主鍵,是唯一的和auto_incremented。

+2

錯誤消息是非常明確的 - 你只能使用計算列上的唯一或主鍵約束。除非持續存在,否則不能創建帶有「非空」約束的計算列。 但是,在你的情況下,這不應該是一個問題,因爲你的計算是基於硬編碼值和非空列,所以計算結果不能爲空。 –

+0

您必須刪除「NOT NULL」或使計算列保持不變。這是錯誤消息基本上所說的。 –

+0

我如何解決它@ZoharPeled – user979331

回答

2

錯誤消息非常明確 - 您只能在計算列上使用唯一或主鍵約束。除非持續存在,否則不能使用非空約束創建計算列。

因此,無論創建列persisted

CREATE TABLE Profiles 
(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [profileID] as ((id * 19379 - 62327) % 99991) PERSISTED NOT NULL 
) 

或者乾脆刪除not null(它永遠不會爲空反正)

CREATE TABLE Profiles 
(
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [profileID] as ((id * 19379 - 62327) % 99991) 
) 
相關問題