一意性は一意性制約で強制できます。
一意のインデックスで大文字と小文字が区別されるかどうかは、サーバー (またはテーブル) の照合によって定義されます .
次のクエリを使用して、データベースの現在の照合順序を取得できます:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
次のようなものが得られるはずです:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
ここで、照合の最後の「CI_AS」は、CI =大文字と小文字を区別しない、AS =アクセントを区別する、という意味です。
これは、必要に応じて変更できます。データベースやテーブルに大文字と小文字が区別される照合がある場合、インデックスの一意性も大文字と小文字が区別されると予想されます。あなたのabcdef と ABCDEF 両方とも一意の文字列として受け入れられる必要があります。
マーク
更新:
私はちょうどこれを試しました (SQL Server 2008 Developer Edition x64) - 私にとってはうまくいきます (私のデータベースは通常 "Latin1_General_CI_AS 照合順序を使用していますが、テーブルごと / VARCHAR 列ごとに別のものを定義することもできます):
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
そして戻ってきます:
string
ABC
abc
違反している一意のインデックスに関するエラーはありません。