Como posso criar uma restrição exclusiva em minha coluna (SQL Server 2008 R2)?

108

Tenho o SQL Server 2008 R2 e desejo definir uma coluna exclusiva.

Parece haver duas maneiras de fazer isso: "índice exclusivo" e "restrição exclusiva". Eles não são muito diferentes do que eu entendo, embora a restrição exclusiva seja recomendada pela maioria, porque você também obtém um índice automaticamente.

Como faço para criar uma restrição exclusiva?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Existe uma maneira de criar uma restrição exclusiva por meio do SQL Server Management Studio?

Ilha Branca
fonte

Respostas:

59

Para criar essas restrições por meio da GUI, você precisa da caixa de diálogo "índices e chaves", e não das restrições de verificação.

Mas, no seu caso, você só precisa executar o trecho de código que já possui. Não precisa ser inserido no diálogo de expressão de forma alguma.

Martin Smith
fonte
Posso apenas executá-lo em uma consulta? Quando tentei, ele foi executado com êxito, mas há algum lugar onde eu possa ir para ver isso (ou seja, onde a configuração foi alterada)?
Ilha Branca,
@WhiteIsland - Você deve vê-lo no SSMS Object Explorer se expandir a tabela e olhar em "Chaves"
Martin Smith
126

Defina a coluna como exclusiva no SQL Server a partir da GUI:

Eles realmente fazem você correr ao redor do celeiro para fazer isso com a GUI:

Certifique-se de que sua coluna não viole a restrição exclusiva antes de começar.

  1. Abra o SQL Server Management Studio.
  2. Clique com o botão direito na sua Mesa, clique em "Design".
  3. Clique com o botão direito na coluna que deseja editar, um menu pop-up aparecerá, clique em Índices / Chaves.
  4. Clique no botão "Adicionar".
  5. Expanda a guia "Geral".
  6. Certifique-se de que a coluna que deseja tornar única esteja selecionada na caixa "colunas".
  7. Altere a caixa "Tipo" para "Chave Única".
  8. Clique em "Fechar".
  9. Você vê um pequeno asterisco na janela do arquivo, isso significa que as alterações ainda não foram salvas.
  10. Pressione Salvar ou pressione Ctrl + s. Ele deve ser salvo e sua coluna deve ser exclusiva.

Ou defina a coluna como exclusiva na janela Consulta SQL:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

As alterações entram em vigor imediatamente:

Command(s) completed successfully.
Eric Leschinski
fonte
Ótimo. Além disso, você pode adicionar várias colunas no script TSQL como este: alter table your_table add constraint pinky unique (yourcolumn, yourcolumn_2);
Jordan
15

Esta é outra maneira de usar a GUI que faz exatamente o que seu script faz, embora passe por Índices (não por Restrições) no explorador de objetos.

  1. Clique com o botão direito em "Índices" e clique em "Novo Índice ..." (nota: isto está desabilitado se você tiver a mesa aberta na visualização de design)

insira a descrição da imagem aqui

  1. Dê um nome ao novo índice ("U_Name"), marque "Unique" e clique em "Add ..."

insira a descrição da imagem aqui

  1. Selecione a coluna "Nome" na próxima janela

insira a descrição da imagem aqui

  1. Clique em OK em ambas as janelas
Tony L.
fonte
1
No SSMS 2014, as opções do menu de contexto do botão direito para criar um novo índice são ligeiramente diferentes das capturas de tela acima. Ao clicar em Novo índice, você deve escolher em uma lista de (índice agrupado, índice não agrupado, índice XML primário, índice XML secundário, índice espacial, índice columnstore não agrupado e índice coluna armazenado agrupado). Normalmente, você escolheria Índice não agrupado.
iCode
8

Uma coisa que não foi abordada com clareza é que o microsoft sql está criando em segundo plano um índice exclusivo para a restrição adicionada

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

como você pode ver, há uma nova restrição e um novo índice U_Name

detzu
fonte