多列的唯一约束

lov*_*iji 240 sql-server ssms sql-server-2008

CREATE TABLE [dbo].[user](
        [userID] [int] IDENTITY(1,1) NOT NULL,
        [fcode] [int] NULL,
        [scode] [int] NULL,
        [dcode] [int] NULL,
        [name] [nvarchar](50) NULL,
        [address] [nvarchar](50) NULL,
     CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    )
    ) ON [PRIMARY]

    GO
Run Code Online (Sandbox Code Playgroud)

如何fcode, scode, dcode使用t-sql和/或management studio?为列添加唯一约束?fcode, scode, dcode必须是独一无二的.

mar*_*c_s 397

如果已在数据库中创建表,则可以稍后使用此SQL查询添加唯一约束:

ALTER TABLE dbo.User
  ADD CONSTRAINT ucCodes UNIQUE (fcode, scode, dcode)
Run Code Online (Sandbox Code Playgroud)


dev*_*ake 280

通过在表创建上使用约束定义,您可以指定跨越多个列的一个或多个约束.从technet文档中简化的语法采用以下形式:

CONSTRAINT constraint_name UNIQUE [ CLUSTERED | NONCLUSTERED ] 
(
    column [ ASC | DESC ] [ ,...n ]
)
Run Code Online (Sandbox Code Playgroud)

因此,resuting表的定义是:

CREATE TABLE [dbo].[user](
    [userID] [int] IDENTITY(1,1) NOT NULL,
    [fcode] [int] NULL,
    [scode] [int] NULL,
    [dcode] [int] NULL,
    [name] [nvarchar](50) NULL,
    [address] [nvarchar](50) NULL,
    CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    ),
    CONSTRAINT [UQ_codes] UNIQUE NONCLUSTERED
    (
        [fcode], [scode], [dcode]
    )
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)


Ton*_* L. 45

这也可以在GUI中完成.这是一个向现有表添加多列唯一约束的示例.

  1. 在表格下方,右键单击索引 - >单击/悬停新索引 - >单击非聚集索引...

在此输入图像描述

  1. 将给出默认的索引名称,但您可能想要更改它.选中唯一复选框,然后单击添加...按钮

在此输入图像描述

  1. 检查要包含的列

在此输入图像描述

在每个窗口中单击" 确定",即可完成.

  • 注意:如果您已在设计视图中打开表格,则此选项不可用。因此,在执行此操作之前,请先关闭设计选项卡。 (6认同)