- 论坛徽章:
- 0
|
Server:Msg 8111, Level 16, State 2, Line 1
Cannot define PRIMARY KEY constraint on nullable column in table 'T2'.
Server:Msg 1750, Level 16, State 1, Line 1
Could not create constraint.See previous errors.
因为主键约束,所以 SQL Server 需要您保证计算的结果不为 NULL。计算列中的计算可以上溢(例如,将 1 添加为最大的整数时)或下溢(从最小的整数抽取 1 时),其他计算会导致被零除错误。但是,如果 ARITHABORT(它决定了发生上溢或被零除错误时查询是否终止)和 ANSI_WARNINGS(它为多个错误条件指定了 ANSI SQL-92 标准行为)会话设置关闭,而不是终止查询,计算可能会具有 NULL 结果。
在实际情况中,当 ARITHABORT 或 ANSI_WARNINGS 设置关闭时,不能在计算列中创建索引,或将值插入到在计算列上具有索引的表中,因为 SQL Server 会检测这种尝试并返回一个错误。但是 SQL Server 仍会要求您确保不会产生 NULL 值。该技巧可以使用 ISNULL() 函数绕过对计算列的计算,如果计算结果为空,将应用一个替换值:
CREATE TABLE T2 (
col1 int NOT NULL,
col2 AS ISNULL(col1 + 1, 0) PRIMARY KEY
) |
|