SQL Server 2008 大文字と小文字を区別する一意の列 質問する

SQL Server 2008 大文字と小文字を区別する一意の列 質問する

列を一意かつ大文字と小文字を区別する方法はありますか?

私は

アブドゥそして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

一意のインデックスが違反されているというエラーは発生しません。

おすすめ記事