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.
时间: 2024-02-16 08:03:53 浏览: 237
这个错误是由于在计算列上创建了不符合要求的约束而导致的。
根据错误消息,只有唯一约束或主键约束可以在计算列上创建,而检查约束、外键约束和非空约束需要计算列被定义为持久性列。
您可以通过以下几种方式来解决此问题:
1. 如果您要在计算列上创建唯一约束或主键约束,请确保计算列是唯一的,并将其定义为持久性列。例如:
```
CREATE TABLE [Table_Name]
(
[Column1] INT NOT NULL,
[Column2] AS ([Column1] * 2) PERSISTED UNIQUE,
CONSTRAINT [PK_Table_Name] PRIMARY KEY CLUSTERED ([Column2])
);
```
在上面的示例中,我们在创建计算列 `[Column2]` 时,使用了 `PERSISTED` 关键字,将其定义为持久性列,并在该列上创建了唯一约束。
2. 如果您要在计算列上创建检查约束、外键约束或非空约束,请先将计算列定义为持久性列。例如:
```
ALTER TABLE [Table_Name]
ADD [Column2_Persisted] AS ([Column1] * 2) PERSISTED;
ALTER TABLE [Table_Name]
ADD CONSTRAINT [CK_Table_Name] CHECK ([Column2_Persisted] > 0);
ALTER TABLE [Table_Name]
ADD CONSTRAINT [FK_Table_Name] FOREIGN KEY ([Column2_Persisted])
REFERENCES [Other_Table_Name] ([Other_Column]);
```
在上面的示例中,我们先创建了一个持久性计算列 `[Column2_Persisted]`,然后在该列上创建了检查约束和外键约束。
请注意,如果您已经创建了计算列并且未将其定义为持久性列,则需要先删除该列并重新创建它时将其定义为持久性列,或者使用 `ALTER TABLE` 语句将其更改为持久性列。
阅读全文