tsql - 计算列 - 作为主键

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

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

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)

但我收到以下错误

"Cannot define PRIMARY KEY constraint on nullable column in table".

这是因为Code 1、Code 2和Type可以为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/

相关文章:

sql-server - SQL 级联删除多列

sql - 多行合并为单列

sql - 如何获取未在多对多关系中表示的行?

sql - IF/ELSE 取决于存储过程的结果

sql - 将主键更改为复合键(主键已存在)

oracle - 在 Oracle 中创建包含部分主键的物化 View 时无法设置 ON COMMIT 刷新属性

sql-server - 在 SQL Server 中获取一周的第一天

sql - 单行 GO(Batch) 语句在 SQL Server 中出错?

java - id使用单例/同步的Web服务增量变量

sql - 如何在 SQL Server 中正确实现 quotename?