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

hit*_*ade 13 sql sql-server sql-server-2008

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

我运行以下查询:

ALTER TABLE user_master
ADD PRIMARY KEY (emp_code)
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误:

Msg 1919,Level 16,State 1,Line 1 中的
列的类型无效,无法用作索引中的键列.emp_codeuser_master
消息1750,级别16,状态0,行1
无法创建约束.查看以前的错误.

我怎么能克服这个?

ta.*_*.is 25

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


Pau*_*lor 6

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

找出最长的员工代码,并创建一个涵盖最长情况的大小的 nvarchar。

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

nvarchar(100)
Run Code Online (Sandbox Code Playgroud)

……只是为了掩饰自己。