UNIQUEと大文字と小文字の両方の列を作成する方法はありますか?大文字と小文字が区別されるSQL Server 2008固有の列
私は一意の列に
ABCDE と ABCDE
を置くことができるようにしたいです。
UNIQUEと大文字と小文字の両方の列を作成する方法はありますか?大文字と小文字が区別されるSQL Server 2008固有の列
私は一意の列に
ABCDE と ABCDE
を置くことができるようにしたいです。
一意性は一意の制約で強制できます。
一意のインデックスが大文字と小文字を区別するかどうかは、サーバー(またはテーブル)照合によって定義されます。
あなたはこのクエリを使用してデータベースの現在の照合を得ることができます。
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
を
と、ユニークなインデックス違反に関するエラーは発生しません。
私はmarcによってリストされたスクリプトを試してみましたが、それはSQL Server 2008の32bitでうまく動作しました。 – RBarryYoung
UIでこのper-tableを実行する方法がないようです。ただし、データベース全体のデータベース作成中に行うことができますが、これは多すぎるようです。 –
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
これはまさに私がやりたいことだったので、ステップバイステップでありがとう@Devraj Gadhavi。私はこれらのスクリプトを作成しようとしていましたが(SSMS 2008R2を使用して)、私はより怠惰な方法で同じことを達成しました:-)。ツリービューで私は自分のテーブルとカラムを見つけ、次にカラムを右クリックして照合順序を変更し、「変更」を選択しました。表示されたウィンドウでは、プロパティの照合順序を大文字と小文字を区別したものに変更しました。ウィンドウの最上部の空白部分(テーブルの列に列が表示されています)を右クリックして「変更スクリプトの生成... "
@Mitch:おそらく彼は直面しているケース#10 :-)あなたは決して知りません.... –
簡単に言えば、もっとオプションが必要です。テーブルが本当に大きくなり、36文字の代わりに62文字のオプションが得られると期待しています。abc ... ABC ... 123 ...また、フィールドは5文字しか使用していません。 –
この投稿は基本的に別の投稿に無料ですhttp://stackoverflow.com/questions/1513911/most-efficient-way-to-unique-random-string –