计算列 - 作为主键

时间:2016-01-28 14:32:54

标签: tsql primary-key sql-server-2014 calculated-columns create-table

我在create table函数中有以下Computed Column:

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约束。

这是因为代码1,代码2和类型可以为NULL,但这三个都不会为NULL。其中一个总会有价值。

无论如何我可以将计算列定义为主键并考虑到上述内容吗?

非常感谢 - JT

2 个答案:

答案 0 :(得分:1)

您的计算列需要保留并且NOT NULL才能用作主键;

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 
          PERSISTED NOT NULL
);

An SQLfiddle to test with

答案 1 :(得分:1)

为什么不使用unique constraint,因为它会允许null

  

与PRIMARY KEY约束不同,UNIQUE约束允许该值   空值。但是,与参与UNIQUE约束的任何值一样,   每列只允许一个空值。可以是UNIQUE约束   由FOREIGN KEY约束引用。