【发布时间】:2016-05-05 23:48:18
【问题描述】:
我在创建表函数中有以下计算列:
Create table test
(
Code1 nchar(10),
Code2 nchar (10),
Type nchar(10),
Final AS CASE WHEN LEN(Code1)>0 THEN Code1 WHEN LEN(Code2)>0 THEN Code2 ELSE Type END
);
Alter table test
add constraint PK_Test1
Primary Key (Final)
但我收到以下错误
“无法在表中的可为空列上定义 PRIMARY KEY 约束”。
这是因为 Code 1、Code 2 和 Type 可以为 NULL,但三者永远不会为 NULL。其中之一将始终具有价值。
无论如何我可以将计算列定义为主键吗?
非常感谢 - JT
【问题讨论】:
-
值“”(即单个空格)的语义与每个字段所需的 NULL 语义有何不同?如果不是,那么只需将它们全部设为 NOT NULL 并使用单个空格代替 NULL 值。这也将简化您在任何地方对该表的查找和连接逻辑。
-
如果任一答案解决了您的问题,您可能需要将问题标记为已回答(答案左侧应该有一个复选标记)。如果他们都没有,请编辑您的问题以添加更多详细信息,以便可以(正确)回答。
标签: tsql primary-key sql-server-2014 calculated-columns create-table