sql - 其类型不能用作索引中的键列

标签 sql sql-server-2008

我有一个错误

Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.

其中键是 nvarchar(max)。快速谷歌搜索发现索引的最大长度是 450 个字符。然而,这并没有解释什么是解决方案。如何创建类似 Dictionary 的内容,其中键和值都是字符串,并且显然键必须是唯一的并且是单个的?我的sql语句是

create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);

最佳答案

唯一约束每行不能超过 8000 字节,并且即使这样也只会使用前 900 字节,因此键的最安全的最大大小是:

create table [misc_info]
( 
    [id] INTEGER PRIMARY KEY IDENTITY NOT NULL, 
    [key] nvarchar(450) UNIQUE NOT NULL, 
    [value] nvarchar(max) NOT NULL
)

即 key 不能超过 450 个字符。如果您可以切换到 varchar 而不是 nvarchar(例如,如果您不需要存储多个代码页的字符),那么字符数可能会增加到 900 个。

关于sql - 其类型不能用作索引中的键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2863993/

相关文章:

sql - LLBLGen 查看生成的 SQL 语句

c# - 在没有用户包装程序的情况下从客户端应用程序执行系统存储过程 (sys.sp_helptext)

c# - 我可以通过实体拆分延迟加载 Entity Framework 6 中实体的一部分吗?

mysql - 根据我从中选择的表设置 View 的列值

mysql - 使用另一个表的平均值插入到一个表中

java.sql.SQLException : ORA-00917: missing comma 异常

sql-server - varChar 和 Char 在强制转换时表现不同

sql - 何时为两种略有不同的信息使用单独的 SQL 数据库表?

sql-server - "lock | communication buffer resources"是什么意思?

c# - SQL 阅读器正在读取空行?