web-dev-qa-db-ja.com

T-SQL:大文字と小文字を区別する一意のキーを作成するにはどうすればよいですか?

大文字と小文字を区別するvarcharフィールドに一意の制約を作成するにはどうすればよいですか(SQL Server 2005)。

現在、私の制約は次のようになっています:

alter table MyTable
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol)

次の2つの値を挿入しようとすると、「UNIQUE KEY制約の違反...」エラーが発生します。

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

大文字と小文字が異なる2つの値をunqiueとして処理してください。次のコードが含まれると思いますが、add constraint構文がどのように変更されるのかわかりません。

COLLATE SQL_Latin1_General_CP1_CS_AS
37
Seibar

これにより、列の大文字と小文字が区別されます。制約に変更はないと思います...

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

この列の選択または結合は、この操作の結果として大文字と小文字が区別されます。

50
Jason Punyon

データベース内のデータの大文字と小文字の区別のみを設定できます(列の最小粒度)。インデックスの大文字と小文字を区別するように設定することはできません。これは、一部のデータベースでは可能ですが、SQL Serverではできない式でインデックスを作成できることと同じです。

4
dkretz