2009-01-27 12 views
32

¿Cómo creo una restricción única en un campo varchar que distingue entre mayúsculas y minúsculas (SQL Server 2005)?T-SQL: ¿Cómo creo una clave única que distingue entre mayúsculas y minúsculas?

Actualmente mi limitación se ve así:

alter table MyTable 
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol) 

Cuando intento para insertar los dos valores siguientes, aparece un "Violación de restricción UNIQUE KEY ..." error.

insert into MyTable (MyCol) values ('ABC') 
insert into MyTable (MyCol) values ('abc') --causes a violation of UNIQUE KEY constraint 'UK_MyTable_MyUnqiueKey' 

Me gustaría que los dos valores de carcasa diferente se manejen como únicos. Imagino que implicará el siguiente código, pero no sé cómo cambia mi sintaxis add constraint.

COLLATE SQL_Latin1_General_CP1_CS_AS 
+0

¿quiere decir caso 'sensible' o insensible? si ABC y abc ambos se resuelven igual, entonces esa es una comparación 'sensible a los casos'. Puede repetir la pregunta – keithwarren7

+0

sí - está en lo correcto. Gracias – Seibar

Respuesta

40

Esto cambiará la columna para que distinga entre mayúsculas y minúsculas. No creo que haya ningún cambio en su limitación ...

ALTER TABLE mytable 
ALTER COLUMN mycolumn VARCHAR(10) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Cualquier selecciona o se une en esta columna se convertirá en mayúsculas y minúsculas, como resultado de esta operación.

+0

¿Esto causará que todas las selecciones en esa columna también distingan entre mayúsculas y minúsculas? – Seibar

+7

Todo lo relacionado con esta columna será sensible a mayúsculas y minúsculas. –

+4

Tendrá que soltar la restricción, ejecutar ALTER, agregar el PK de nuevo para tratar con la dependencia – gbn

4

Solo puede establecer la distinción entre mayúsculas y minúsculas de los datos en la base de datos (la granularidad más pequeña de la columna). No puede establecer la sensibilidad a mayúsculas/minúsculas de un índice, que sería equivalente a poder indexar en una expresión, lo cual es posible en algunas bases de datos pero no en el servidor SQL.

Cuestiones relacionadas