【发布时间】:2013-12-23 23:39:10
【问题描述】:
我看过 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) 列创建唯一键?
【问题讨论】:
-
您的电子邮件列的数据长度是多少??
-
是一个 nvarchar(max) 列
-
在这里,首先,您不能在 VARCHAR(MAX) 列上创建任何索引,当您创建唯一约束时,它实际上会在幕后创建一个非聚集唯一索引。您需要更改数据类型并查看我的答案以了解更多详细信息。
-
为什么要使用 VARCHAR(MAX) 作为电子邮件列?只需使用 varchar 100-200 之类的东西,我个人从未见过超过 50 个字符的电子邮件 :)
-
因为我使用的是 Code First,当我没有指定列的长度时,它将使用 Max 创建。我更改了 NVARCHAR(50) 的类型,并添加了唯一约束成功,非常感谢!
标签: sql sql-server entity-framework unique