SQL Server 2005 ¿Cómo crear una restricción única?

181

¿Cómo creo una restricción única en una tabla existente en SQL Server 2005?

Estoy buscando tanto el TSQL como cómo hacerlo en el Diagrama de la base de datos.

David Basarab
fuente

Respuestas:

272

El comando SQL es:

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

Vea la sintaxis completa aquí .

Si desea hacerlo desde un Diagrama de base de datos:

  • haga clic derecho en la tabla y seleccione 'Índices / claves'
  • haga clic en el botón Agregar para agregar un nuevo índice
  • ingrese la información necesaria en las Propiedades en el lado derecho:
    • las columnas que desea (haga clic en el botón de puntos suspensivos para seleccionar)
    • el conjunto es exclusivo para Sí
    • darle un nombre apropiado
Rory
fuente
1
Funciona ... pero ... por qué la restricción se muestra en la carpeta INDEX en lugar de la carpeta CONSTRAINTS. Se muestra con otro icono, pero de todos modos debería estar en la carpeta de restricciones.
Fernando Torres
84

En SQL Server Management Studio Express:

  • Haga clic con el botón derecho en la tabla, elija Modificar o Diseñar (para versiones posteriores)
  • Haga clic con el botón derecho en el campo, elija Índices / claves ...
  • Haga clic en Agregar
  • Para Columnas , seleccione el nombre del campo que desea que sea único.
  • Para Tipo , elija Clave única .
  • Haga clic en Cerrar , guardar la tabla.
James Lawruk
fuente
29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
WildJoe
fuente
15

Advertencia: solo una fila nula puede estar en la columna que ha configurado para ser única.

Puede hacer esto con un índice filtrado en SQL 2008:

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

Consulte El valor del campo debe ser único a menos que sea NULL para un rango de respuestas.

Ardilla
fuente
¿Cómo se hace esto en SQL Server 2005?
Maxrunner
2
No se puede lograr en SQL Server 2005. Recomiendo encarecidamente que se actualice a un RDBMS más actualizado: no será oficialmente compatible a partir del 12 de abril de 2016.
Reedstonefood
13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
Ivan Bosnic
fuente
10

También descubrí que puedes hacer esto a través de los diagramas de la base de datos.

Al hacer clic derecho en la tabla y seleccionar Índices / claves ...

Haga clic en el botón 'Agregar' y cambie las columnas a las columnas que desea que sean únicas.

El cambio es exclusivo de Sí.

Haga clic en cerrar y guarde el diagrama, y ​​lo agregará a la tabla.

David Basarab
fuente
8

Estás buscando algo como lo siguiente

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Documentos de MSDN

Trueno3
fuente
6

Para crear una restricción ÚNICA en una o varias columnas cuando la tabla ya está creada, use el siguiente SQL:

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

Para permitir nombrar una restricción ÚNICA para la consulta anterior

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

La consulta soportada por MySQL / SQL Server / Oracle / MS Access.

Rafiq
fuente
UNIQUE NONCLUSTERED y opciones PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet
5

En el diagrama del estudio de administración, elija la tabla, haga clic con el botón derecho para agregar una nueva columna si lo desea, haga clic con el botón derecho en la columna y elija "Verificar restricciones", allí puede agregar una.

Gibbons
fuente
0

En algunas situaciones, puede ser conveniente asegurarse de que la clave Única no exista antes de crearla. En tales casos, el siguiente script podría ayudar:

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
fuente