¿Cómo puedo crear una restricción única en mi columna (SQL Server 2008 R2)?

108

Tengo SQL Server 2008 R2 y quiero establecer una columna única.

Parece haber dos formas de hacer esto: "índice único" y "restricción única". No son muy diferentes de lo que entiendo, aunque la mayoría recomienda una restricción única, porque también obtiene un índice automáticamente.

¿Cómo creo una restricción única?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

¿Hay alguna forma de crear una restricción única a través de SQL Server Management Studio?

Isla Blanca
fuente

Respuestas:

59

Para crear estas restricciones a través de la GUI, necesita el diálogo "índices y claves", no el de verificación de restricciones.

Pero en su caso, solo necesita ejecutar el fragmento de código que ya tiene. No es necesario ingresarlo en el diálogo de expresión.

Martin Smith
fuente
¿Entonces puedo ejecutarlo en una consulta? Cuando lo intenté, se ejecutó correctamente, pero ¿hay algún lugar al que pueda ir para ver eso (es decir, dónde se cambió la configuración)?
White Island
@WhiteIsland - Debería verlo en el Explorador de objetos SSMS si expande la tabla y busca en "Claves"
Martin Smith
126

Establezca la columna como única en SQL Server desde la GUI:

Realmente te hacen correr por el granero para hacerlo con la GUI:

Asegúrese de que su columna no viole la restricción única antes de comenzar.

  1. Abra SQL Server Management Studio.
  2. Haga clic derecho en su tabla, haga clic en "Diseño".
  3. Haga clic con el botón derecho en la columna que desea editar, aparecerá un menú emergente, haga clic en Índices / Claves.
  4. Haga clic en el botón "Agregar".
  5. Expanda la pestaña "General".
  6. Asegúrese de tener la columna que desea hacer única seleccionada en el cuadro "columnas".
  7. Cambie el cuadro "Tipo" a "Clave única".
  8. Haga clic en "Cerrar".
  9. Verá un pequeño asterisco en la ventana del archivo, esto significa que los cambios aún no se guardaron.
  10. Presione Guardar o presione Ctrl + s. Debería guardarse y su columna debería ser única.

O establezca la columna como única desde la ventana Consulta SQL:

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

Los cambios entran en vigor inmediatamente:

Command(s) completed successfully.
Eric Leschinski
fuente
Excelente. También puede agregar varias columnas en el script TSQL de la siguiente manera: alterar tabla your_table agregar restricción meñique único (yourcolumn, yourcolumn_2);
Jordania
15

Aquí hay otra forma a través de la GUI que hace exactamente lo que hace su secuencia de comandos a pesar de que pasa por índices (no restricciones) en el explorador de objetos.

  1. Haga clic derecho en "Índices" y haga clic en "Nuevo índice ..." (nota: esto está deshabilitado si tiene la tabla abierta en la vista de diseño)

ingrese la descripción de la imagen aquí

  1. Asigne un nombre al nuevo índice ("U_Name"), marque "Único" y haga clic en "Agregar ..."

ingrese la descripción de la imagen aquí

  1. Seleccione la columna "Nombre" en la siguiente ventana

ingrese la descripción de la imagen aquí

  1. Haga clic en Aceptar en ambas ventanas
Tony L.
fuente
1
En SSMS 2014, las opciones del menú contextual del botón derecho para crear un nuevo índice son ligeramente diferentes de las capturas de pantalla anteriores. Al hacer clic en Nuevo índice, debe elegir de una lista de (Índice agrupado, Índice no agrupado, Índice XML principal, Índice XML secundario, Índice espacial, Índice de almacén de columnas no agrupado e Índice de almacén de columnas agrupado). Normalmente, elegiría Índice no agrupado.
iCode
8

Una cosa que no se cubre claramente es que microsoft sql está creando en segundo plano un índice único para la restricción agregada

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 puede ver, hay una nueva restricción y un nuevo índice U_Name

detzu
fuente