2009-10-03 15 views
20

UNIQUEと大文字と小文字の両方の列を作成する方法はありますか?大文字と小文字が区別されるSQL Server 2008固有の列

私は一意の列に

ABCDEABCDE

を置くことができるようにしたいです。

+11

@Mitch:おそらく彼は直面しているケース#10 :-)あなたは決して知りません.... –

+0

簡単に言えば、もっとオプションが必要です。テーブルが本当に大きくなり、36文字の代わりに62文字のオプションが得られると期待しています。abc ... ABC ... 123 ...また、フィールドは5文字しか使用していません。 –

+0

この投稿は基本的に別の投稿に無料ですhttp://stackoverflow.com/questions/1513911/most-efficient-way-to-unique-random-string –

答えて

29

一意性は一意の制約で強制できます。

一意のインデックスが大文字と小文字を区別するかどうかは、サーバー(またはテーブル)照合によって定義されます。

あなたはこのクエリを使用してデータベースの現在の照合を得ることができます。

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

を、あなたのようなものを取得する必要があります照合の最後に

ここ
SQLCollation 
———————————— 
SQL_Latin1_General_CP1_CI_AS 

、「CI_ASを」 CI =大文字と小文字を区別しない、AS =アクセントを区別する。

これは必要なものに変更できます。データベースやテーブルに大文字と小文字が区別される照合がある場合は、インデックスの一意性も大文字と小文字が区別されます。 abcdefおよびABCDEFは、両方とも一意の文字列として使用できます。

マルク・

UPDATE: - (私のデータベースは、一般的に「Latin1_General_CI_AS照合を使用している私のために動作しますが、私は別の1あたりを定義することができます

は、私はこの(SQL Server 2008の開発版のx64)を試してみましたテーブル/ 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 

と、ユニークなインデックス違反に関するエラーは発生しません。

+1

私はmarcによってリストされたスクリプトを試してみましたが、それはSQL Server 2008の32bitでうまく動作しました。 – RBarryYoung

+0

UIでこのper-tableを実行する方法がないようです。ただし、データベース全体のデータベース作成中に行うことができますが、これは多すぎるようです。 –

0

大文字と小文字を区別するデータベースからデータをインポートする必要がありました。プライマリキーをソースのプライマリキーの列に配置しようとしたとき、重複したキーのためにできませんでした。私は、列(varchar)の大文字小文字を区別(テーブルを右クリックし、デザインを選択し、変更したい列を強調表示し、照合順序をクリックしてください)に変更しました。 (SQL Server 2008 R2 64ビット)。

+1

説明無しの落札。高級。 – bvj

+0

SO宇宙へようこそ。 – cbmeeks

3

varchar/nvarcharの列に既に定義されているunique key/indexを持つ既存のテーブルで実行する必要がある場合は、ここにスクリプトがあります。

ALTER TABLE [YourTable] DROP CONSTRAINT [UIX_YourUniqueIndex] 
GO 

ALTER TABLE [YourTable] ALTER COLUMN [YourColumn] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL; 
GO 

ALTER TABLE [YourTable] ADD CONSTRAINT [UIX_YourUniqueIndex] UNIQUE NONCLUSTERED 
(
    [YourColumn] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 
0

これはまさに私がやりたいことだったので、ステップバイステップでありがとう@Devraj Gadhavi。私はこれらのスクリプトを作成しようとしていましたが(SSMS 2008R2を使用して)、私はより怠惰な方法で同じことを達成しました:-)。ツリービューで私は自分のテーブルとカラムを見つけ、次にカラムを右クリックして照合順序を変更し、「変更」を選択しました。表示されたウィンドウでは、プロパティの照合順序を大文字と小文字を区別したものに変更しました。ウィンドウの最上部の空白部分(テーブルの列に列が表示されています)を右クリックして「変更スクリプトの生成... "

関連する問題