我有一张表格,用于存储员工详细信息。我想更改表并将列emp_code
之一设置为主键。它的数据类型为nvarchar(max)
,但我无法将其设置为主键。
我运行以下查询:
ALTER TABLE user_master
ADD PRIMARY KEY (emp_code)
但它给了我一个错误:
Msg 1919,Level 16,State 1,Line 1
表emp_code
中的列user_master
的类型无效,无法用作索引中的键列。
Msg 1750,Level 16,State 0,Line 1
无法创建约束。查看以前的错误。
我怎样才能克服这个?
答案 0 :(得分:24)
索引的密钥不能超过900字节的总大小。将数据类型更改为NVARCHAR(450)
。如果不合适,请使用代理键(通常为IDENTITY
列)。
答案 1 :(得分:4)
您无法使用varchar(max)
。它不是为存储主键而设计的。
找出最长的员工代码,并创建一个覆盖最长情况的大小的nvarchar。
e.g。最长的员工代码是70个字符,请尝试: -
nvarchar(100)
......只是为了掩盖自己。
答案 2 :(得分:1)
是的,你是对的。警告!最大密钥长度为900字节。索引PK__bookmark__2DFA2B0E164452B1
的最大长度为2000个字节。对于某些大值组合,插入/更新操作将失败。
不使用varchar(max)