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.

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

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.

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

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.


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]

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.



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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.