2017-08-17 703 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) 
) 
相关问题