我想创建一个名为tbl_Ticket_Mail_Address
的表。创建表时显示错误。
表:
CREATE TABLE [dbo].[tbl_Ticket_Mail_Address] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Designation] NVARCHAR (MAX) NULL,
[Emp_ID] NVARCHAR (MAX) NOT NULL,
[Emp_Name] NVARCHAR (MAX) NULL,
[Mobile] NVARCHAR (MAX) NULL,
[Emp_Email] NVARCHAR (MAX) NULL,
[Category] NVARCHAR (MAX) NULL,
[Created_By] NVARCHAR (MAX) NULL,
[Created_Date] DATE NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [uc_tbl_Ticket_Mail_Address] UNIQUE NONCLUSTERED ([Emp_ID] ASC, [Category] ASC)
);
58,1):SQL72014:.Net SqlClient数据提供程序:消息1919,级别16,状态1,行1列'tbl_Ticket_Mail_Address'中的列'Emp_ID'属于无效用作关键列的类型一个索引。 (57,5):SQL72045:脚本执行错误。执行的脚本:
CREATE TABLE [dbo].[tbl_Ticket_Mail_Address] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Designation] NVARCHAR (MAX) NULL,
[Emp_ID] NVARCHAR (MAX) NOT NULL,
[Emp_Name] NVARCHAR (MAX) NULL,
[Mobile] NVARCHAR (MAX) NULL,
[Emp_Email] NVARCHAR (MAX) NULL,
[Category] NVARCHAR (MAX) NULL,
[Created_By] NVARCHAR (MAX) NULL,
[Created_Date] DATE NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [uc_tbl_Ticket_Mail_Address] UNIQUE NONCLUSTERED ([Emp_ID] ASC, [Category] ASC)
);
(58,1):SQL72014:.Net SqlClient数据提供程序:消息1750,级别16,状态0,行1无法创建约束或索引。查看以前的错误。 (57,5):SQL72045:脚本执行错误。执行的脚本: 批处理执行时发生错误。
答案 0 :(得分:16)
SQL Server不允许您使用nvarchar(max)
列创建唯一索引。如D_T_U所述,请选择较小的尺寸,例如: nvarchar(100)
您将能够创建索引。
当然,列大小需要符合您的要求,因此100只是一个例子。
奖励信息:创建索引时,请记住组合索引值的大小不得超过900个字节。每个nvarchar
字符将使用2个字节,因此您最多可以使用nvarchar(450)
的组合大小。例如,在您的情况下,您可以
[Emp_ID] NVARCHAR (50) NOT NULL,
[Category] NVARCHAR (400)
只要任何给定行上的数据不超过900字节,就可以为nvarchar列声明更大的大小,但这是危险的。例如,如果您将两列都声明为nvarchar(300)
,则会收到以下消息:
警告!最大密钥长度为900字节。该指数 'uc_tbl_Ticket_Mail_Address'的最大长度为1200字节。对于 某些大值组合,插入/更新操作会 失败。
答案 1 :(得分:1)
检查MSDN中的CREATE INDEX语句。
大对象(LOB)数据类型ntext,text, varchar(max),nvarchar(max),varbinary(max),xml或image不能 指定为索引的键列。
要解决问题本身,请参阅@ Damien_The_Unbeliever的评论。
答案 2 :(得分:0)
如果您的索引列已定义为SPARSE,也会发生此错误。
[hash] VARBINARY(32) SPARSE NULL -- Fail
[hash] VARBINARY(32) NULL -- Success
(597,1):SQL72014:.Net SqlClient数据提供程序:消息1919,级别16, 表'Document_JSON'中的状态2,行1列'hash'是类型 不能用作索引中的键列。
(597,0):SQL72045:脚本执行错误。