Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Coluna exclusiva do SQL Server 2008 que diferencia maiúsculas de minúsculas


A exclusividade pode ser imposta com uma restrição exclusiva.

Se o índice exclusivo diferencia maiúsculas de minúsculas ou não, é definido pelo agrupamento do servidor (ou da tabela) .

Você pode obter o agrupamento atual do seu banco de dados com esta consulta:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

e você deve obter algo como:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

Aqui, o "CI_AS" no final do agrupamento significa:CI =não diferencia maiúsculas de minúsculas, AS =diferencia acentos.

Isso pode ser alterado para o que você precisar. Se o seu banco de dados e/ou tabela tiver um agrupamento que diferencia maiúsculas de minúsculas, eu esperaria que a exclusividade do seu índice também diferenciasse maiúsculas de minúsculas, por exemplo, seu abcdef e ABCDEF devem ser aceitáveis ​​como strings exclusivas.

Marco

ATUALIZAR:

Acabei de tentar isso (SQL Server 2008 Developer Edition x64) - funciona para mim (meu banco de dados geralmente usa o agrupamento "Latin1_General_CI_AS, mas posso definir um diferente por tabela / por coluna VARCHAR mesmo):
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

e eu volto:
string
ABC
abc

e nenhum erro sobre o índice exclusivo sendo violado.