一种在索引中用作键列的无效类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

有个错误

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

其中键是nvarchar(Max)的SQL语句是

create table [misc_info] (
[id] INTEGER PRIMARY KEY IDENTITY NOT NULL,
[key] nvarchar(max) UNIQUE NOT NULL,
[value] nvarchar(max) NOT NULL);
提问于
用户回答回答于

SQLServer中有一个限制(最多可达2008 R2),即varchar(MAX)和nvarchar(MAX)(以及其他几种类型,如text、ntext)不能用于索引

([dbo].[CheckKey]([key])=(1))

和DBO...切奇是一个标量函数,定义为:

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

用户回答回答于

唯一的约束不能超过每行8000字节

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

也就是说,键不能超过450个字符。如果可以切换到varchar而不是nvarchar(例如,如果不需要存储多个代码页中的字符),那么这可能会增加到900个字符。

扫码关注云+社区