15

我有一张存储员工详细信息的表格。我想更改表并将其中一列设置emp_code为主键。它的数据类型是nvarchar(max),但我无法将其设置为主键。

我运行以下查询:

ALTER TABLE user_master
ADD PRIMARY KEY (emp_code)

但它给了我一个错误:

消息 1919,级别 16,状态 1,行 1表中的
列的类型不能用作索引中的键列。emp_codeuser_master
消息 1750,级别 16,状态 0,行 1
无法创建约束。请参阅以前的错误。

我该如何克服呢?

4

3 回答 3

28

索引的键总大小不能超过 900 字节。将数据类型更改为NVARCHAR(450). 如果这不合适,请使用代理键(通常是一IDENTITY列)。

于 2012-10-30T10:41:24.770 回答
5

你不能使用varchar(max). 它不是为存储主键而设计的。

找出最长的员工代码,并创建一个大小合适的 nvarchar 来覆盖您的最长案例。

例如最长的员工代码是 70 个字符,请尝试:-

nvarchar(100)

...只是为了掩饰自己。

于 2012-10-30T10:42:48.740 回答
1

是的,你是对的。警告!最大密钥长度为 900 字节。索引PK__bookmark__2DFA2B0E164452B1的最大长度为 2000 字节。对于较大值的某些组合,插入/更新操作将失败。不使用varchar(max)

于 2015-04-20T09:37:54.470 回答