表中的列的类型无效,无法用作索引中的键列

时间:2012-10-30 10:39:27

标签: sql sql-server sql-server-2008

我有一张表格,用于存储员工详细信息。我想更改表并将列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
  无法创建约束。查看以前的错误。

我怎样才能克服这个?

3 个答案:

答案 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)