Restrição única em várias colunas

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 

Como adiciono uma restrição exclusiva para as colunas fcode, scode, dcode com t-sql e / ou management studio ? fcode, scode, dcode devem ser únicos juntos.

Usando a definição de restrição na criação de tabela, você pode especificar uma ou várias restrições que abrangem várias colunas. A syntax, simplificada da documentação do technet , está na forma de:

 CONSTRAINT constraint_name UNIQUE [ CLUSTERED | NONCLUSTERED ] ( column [ ASC | DESC ] [ ,...n ] ) 

Portanto, a definição da tabela resultante seria:

 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] 

Se a tabela já estiver criada no database, você poderá adicionar uma restrição exclusiva posteriormente usando essa consulta SQL:

 ALTER TABLE dbo.User ADD CONSTRAINT ucCodes UNIQUE (fcode, scode, dcode) 

Isso também pode ser feito na GUI. Aqui está um exemplo adicionando uma restrição exclusiva de várias colunas a uma tabela existente.

  1. Abaixo da tabela, clique com o botão direito em Índices -> Clique / passe o mouse em Novo Índice -> Clique em Índice Não-Clusterizado …

insira a descrição da imagem aqui

  1. Um nome de índice padrão será dado, mas você pode querer alterá-lo. Marque a checkbox de seleção Exclusivo e clique no botão Adicionar …

insira a descrição da imagem aqui

  1. Verifique as colunas que você quer include

insira a descrição da imagem aqui

Clique em OK em cada janela e pronto.

 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