我想创建一个名为tbl_Ticket_Mail_Address的表。创建表时显示错误。

table :

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)
);


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)
);

最佳答案

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),则会收到以下消息:

关于sql-server - 类型是否无效,不能用作索引中的键列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30298629/

10-13 05:44