我曾经观看过youtube视频教程教学如何创建独特的密钥
http://www.youtube.com/watch?v=oqrsfatxTYE&list=PL08903FB7ACA1C2FB&index=9
在视频中,他为Email(nvarchar)列创建了一个唯一键,我可以在手动创建数据库时创建它,但是当我尝试为使用实体框架代码创建的数据库创建唯一键时,使用下一个查询
ALTER TABLE Peoples
ADD CONSTRAINT UQ_MyTable_Email UNIQUE (email)
会产生错误:
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.
有什么问题?如何为nvarchar(max)列创建唯一键?
答案 0 :(得分:8)
说如果你创建这个表
CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(1000)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO
你会收到警告:
警告!最大密钥长度为900字节。索引'uc_Email'有 最大长度为1000字节。对于某些大值的组合, 插入/更新操作将失败
您要在其上定义唯一约束的列应小于或等于900字节,因此如果您希望能够创建一个VARCHAR(900)
或NVARCHAR(450)
列,则可以使用CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(900)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO
或CREATE TABLE ConstTable
(ID INT,
Email VARCHAR(MAX)
)
GO
列该列的唯一约束
上面的相同表格与VARCHAR(450)创建时没有任何警告
CREATE INDEX ix_SomeIdex
ON ConstTable (Email)
<强>结果强>
命令已成功完成。
测试您的表
说这是你的表
{{1}}
现在尝试在VARCHAR(MAX)数据类型上创建任何索引,您将得到相同的错误。
{{1}}
错误消息
Msg 1919,Level 16,State 1,Line 1列'电子邮件'在表格中 'ConstTable'是一种无效用作关键列的类型 索引。