我有一个错误
Column 'key' in table 'misc_info' is of a type that is invalid for use as a key column in an index.
其中key是一个nvarchar(max)。快速搜索谷歌可以发现索引的最大长度是450个字符。然而,这并不能解释什么是解决方案。我如何创建像字典的键和值都是字符串,显然键必须是唯一的,是单一的?我的sql语句
create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);
在SQL Server(直到2008 R2)中有一个限制,varchar(MAX)和nvarchar(MAX)(以及其他一些类型,如text, ntext)不能在索引中使用。你有两个选择:
1. 在关键字段上设置限制大小ex. nvarchar(100)
2. 创建一个检查约束,将值与表中的所有键进行比较。
条件为:
([dbo].[CheckKey]([key])=(1))
和[dbo]。[CheckKey]是一个定义为:
CREATE FUNCTION [dbo].[CheckKey]
(
@key nvarchar(max)
)
RETURNS bit
AS
BEGIN
declare @res bit
if exists(select * from key_value where [key] = @key)
set @res = 0
else
set @res = 1
return @res
END
但请注意,本机索引比检查约束性能更好,所以除非您确实无法指定长度,否则不要使用检查约束。