Lai*_*290 5 sql sql-server entity-framework unique
我曾经看过youtube视频教程教学如何创建独特的密钥
http://www.youtube.com/watch?v=oqrsfatxTYE&list=PL08903FB7ACA1C2FB&index=9
在视频中,他创建了一个用于Email(nvarchar)列的唯一键,我可以在手动创建数据库时创建它,但是当我尝试为使用实体框架代码创建的数据库创建唯一键时,首先使用下一个查询
ALTER TABLE Peoples
ADD CONSTRAINT UQ_MyTable_Email UNIQUE (email)
Run Code Online (Sandbox Code Playgroud)
它会产生一个错误:
Msg 1919, Level 16, State 1, Line 2
Column 'email' in table 'Peoples' is of a type that is invalid for use as a key column in an index.
Run Code Online (Sandbox Code Playgroud)
有什么问题?我该怎么做才能为nvarchar(max)列创建唯一键?
说如果你创建这个表
CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(1000)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO
Run Code Online (Sandbox Code Playgroud)
你会得到一个警告:
警告!最大密钥长度为900字节.索引'uc_Email'的最大长度为1000个字节.对于某些大值组合,插入/更新操作将失败
你列上要定义一个唯一约束应小于或等于900个字节,所以你可以有一个VARCHAR(900)或NVARCHAR(450)列,如果你希望能够在该列上创建一个唯一约束
与VARCHAR(450)相同的上表在没有任何警告的情况下创建
CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(900)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO
Run Code Online (Sandbox Code Playgroud)
结果
命令已成功完成.
测试你的表
说这是你的桌子
CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(MAX)
)
GO
Run Code Online (Sandbox Code Playgroud)
现在尝试在VARCHAR(MAX)数据类型上创建任何索引,您将得到相同的错误.
CREATE INDEX ix_SomeIdex
ON ConstTable (Email)
Run Code Online (Sandbox Code Playgroud)
错误信息
消息1919,级别16,状态1,行1列'ConstTable'中的列'电子邮件'属于无法用作索引中的键列的类型.