SQL Server 2005 Como criar uma restrição exclusiva?

181

Como criar uma restrição exclusiva em uma tabela existente no SQL Server 2005?

Estou procurando pelo TSQL e como fazê-lo no diagrama do banco de dados.

David Basarab
fonte

Respostas:

272

O comando SQL é:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

Veja a sintaxe completa aqui .

Se você deseja fazer isso a partir de um diagrama de banco de dados:

  • clique com o botão direito do mouse na tabela e selecione 'Índices / Chaves'
  • clique no botão Adicionar para adicionar um novo índice
  • insira as informações necessárias em Propriedades, no lado direito:
    • as colunas que você deseja (clique no botão de reticências para selecionar)
    • definir É exclusivo para Sim
    • dê um nome apropriado
Rory
fonte
1
Funciona ... mas ... por que a restrição é mostrada na pasta INDEX, em vez da pasta CONSTRAINTS. É mostrado com outro ícone, mas mesmo assim deve estar na pasta de restrições.
Fernando Torres
84

No SQL Server Management Studio Express:

  • Clique com o botão direito do mouse na tabela, escolha Modificar ou Design (para versões posteriores)
  • Clique com o botão direito do mouse no campo, escolha Índices / Chaves ...
  • Clique em Adicionar
  • Para Colunas , selecione o nome do campo que você deseja que seja exclusivo.
  • Para Tipo , escolha Chave exclusiva .
  • Clique em Fechar , salve a tabela.
James Lawruk
fonte
29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
WildJoe
fonte
15

Aviso: apenas uma linha nula pode estar na coluna que você definiu para ser única.

Você pode fazer isso com um índice filtrado no SQL 2008:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

Consulte O valor do campo deve ser exclusivo, a menos que seja NULL para um intervalo de respostas.

Esquilo
fonte
como você faz isso no sql server 2005?
Maxrunner
2
Não é viável no sql server 2005. Eu recomendaria fortemente a atualização para uma mais up-to-date RDBMS - será oficialmente suportada como de 12 de Abril de 2016.
reedstonefood
13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
Ivan Bosnic
fonte
10

Também descobri que você pode fazer isso através dos diagramas do banco de dados.

Clicando com o botão direito do mouse na tabela e selecionando Índices / Chaves ...

Clique no botão 'Adicionar' e altere as colunas para as que você deseja tornar únicas.

Alterar é exclusivo para Sim.

Clique em fechar e salve o diagrama, e ele será adicionado à tabela.

David Basarab
fonte
8

Você está procurando algo como o seguinte

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Documentos do MSDN

Thunder3
fonte
6

Para criar uma restrição UNIQUE em uma ou várias colunas quando a tabela já estiver criada, use o seguinte SQL:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Para permitir a nomeação de uma restrição UNIQUE para a consulta acima

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

A consulta suportada pelo MySQL / SQL Server / Oracle / MS Access.

Rafiq
fonte
UNIQUE NONCLUSTERED e opções PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet
5

No diagrama do estúdio de gerenciamento, escolha a tabela, clique com o botão direito do mouse para adicionar uma nova coluna, se desejado, clique com o botão direito do mouse na coluna e escolha "Verificar restrições", onde você pode adicionar uma.

Gibbons
fonte
0

Em algumas situações, pode ser desejável garantir que a chave Exclusiva não exista antes de criá-la. Nesses casos, o script abaixo pode ajudar:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
Mario Vázquez
fonte