Уникальное ограничение на несколько столбцов
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
Как добавить уникальное ограничение для столбцов fcode, scode, dcode
с помощью t-sql
и/или management studio
? fcode, scode, dcode
должен быть уникальным вместе.
Ответы
Ответ 1
Используя определение ограничения при создании таблицы, вы можете указать одно или несколько ограничений, которые охватывают несколько столбцов. Синтаксис, упрощенный техническая документация, представлен в виде:
CONSTRAINT constraint_name UNIQUE [ CLUSTERED | NONCLUSTERED ]
(
column [ ASC | DESC ] [ ,...n ]
)
Следовательно, определение таблицы повторного использования будет:
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]
Ответ 2
Если таблица уже создана в базе данных, вы можете добавить уникальное ограничение позже, используя этот SQL-запрос:
ALTER TABLE dbo.User
ADD CONSTRAINT ucCodes UNIQUE (fcode, scode, dcode)
Ответ 3
Это также можно сделать в графическом интерфейсе. Здесь пример добавляет уникальное ограничение с несколькими столбцами к существующей таблице.
- Под таблицей щелкните правой кнопкой мыши Indexes- > Click/hover New Index- > Click Non-Clustered Index...
![введите описание изображения здесь]()
- Будет указано имя индекса по умолчанию, но вы можете его изменить. Установите флажок "Уникальный" и нажмите кнопку "Добавить..."
![введите описание изображения здесь]()
- Проверьте столбцы, которые вы хотите включить
![введите описание изображения здесь]()
Нажмите ОК в каждом окне, и все готово.
Ответ 4
USE [TSQL2012]
GO
/****** Object: Table [dbo].[Table_1] Script Date: 11/22/2015 12:45:47 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
[seq] [bigint] IDENTITY(1,1) NOT NULL,
[ID] [int] NOT NULL,
[name] [nvarchar](50) NULL,
[cat] [nvarchar](50) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [IX_Table_1] UNIQUE NONCLUSTERED
(
[name] ASC,
[cat] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO