我在创建表函数中具有以下计算列:

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

最佳答案

您的计算列需要保留,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

关于tsql - 计算列-作为主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35064253/

10-10 05:54