列を一意かつ大文字と小文字を区別する方法はありますか?
私は
アブドゥそしてABCDE
ユニークな列に。
ベストアンサー1
一意性は、一意制約によって強制できます。
ユニークインデックスが大文字と小文字を区別するかどうかは、サーバー(またはテーブル)によって定義されます。照合。
次のクエリを使用して、データベースの現在の照合順序を取得できます。
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
次のような結果になるはずです:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
ここで、照合の末尾の「CI_AS」は、CI = 大文字と小文字を区別しない、AS = アクセントを区別することを意味します。
これは必要に応じて変更できます。データベースやテーブルに大文字と小文字を区別する照合順序がある場合は、インデックスの一意性も大文字と小文字を区別するはずです。たとえば、ABCデフそして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
一意のインデックスが違反されているというエラーは発生しません。