sql >> Base de Datos >  >> RDS >> Sqlserver

Columna única de SQL Server 2008 que distingue entre mayúsculas y minúsculas

La unicidad se puede imponer con una restricción única.

Si el índice único distingue entre mayúsculas y minúsculas o no, lo define la intercalación del servidor (o de la tabla). .

Puede obtener la intercalación actual de su base de datos con esta consulta:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

y debería obtener algo como:

SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

Aquí, el "CI_AS" al final de la colación significa:CI =No distingue entre mayúsculas y minúsculas, AS =Distingue acentos.

Esto se puede cambiar a lo que necesites que sea. Si su base de datos y/o tabla tiene una intercalación que distingue entre mayúsculas y minúsculas, espero que la singularidad de su índice también distinga entre mayúsculas y minúsculas, p. tu abcdef y ABCDEF deben ser aceptables como cadenas únicas.

Marc

ACTUALIZAR:

Acabo de probar esto (SQL Server 2008 Developer Edition x64):funciona para mí (mi base de datos generalmente usa la intercalación "Latin1_General_CI_AS, pero puedo definir una diferente por tabla/por columna VARCHAR incluso):

CREATE TABLE TestUnique
    (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)

CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)

INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')

SELECT * FROM dbo.TestUnique

y vuelvo:

string
ABC
abc

y ningún error sobre la violación del índice único.