2011-07-02 24 views
5

私はいくつかのデータベースを持つSQL Serverを持っています。私は、これらのデータベースの1つが変数の名前に大文字と小文字を区別し、他にはないことを望みます。SQL Serverの大文字と小文字を区別する変数

私はエラー

DECLARE @A int 
DECLARE @a int 

インスタンス上の他のデータベースがあることを可能にしながら、どのようにして、(その変数名用)大文字と小文字を区別する1つのデータベースを変更することができずに、このスクリプトを実行することができるように設定を変更する必要が

変数名の大文字小文字を区別しない?

答えて

10

必要な動作を得るには、サーバーの照合順序を大文字小文字の区別に変更する必要があります。 dbの照合順序を変更するだけでは不十分です。


SQL Serverインストールのデフォルト照合であるSQL_Latin1_General_CP1_CI_ASでは、大文字と小文字は区別されません。

サーバの照合順序を大文字と小文字を区別しないように変更したいようです。 _CSで1つを選択してください。 _CIは「大文字と小文字を区別しない」を意味し、大文字と小文字は区別されます_CSです。多分Latin1_General_CS_ASが必要になるでしょう。

これは前の質問Changing SQL Server collation to case insensitive from case sensitive?の素晴らしい答えです。 SQL Server Books Onlineから

COLLATE (Transact-SQL)

識別子の照合は、それが定義されるレベルに依存します。

  • ログインレベルやデータベース名などのインスタンスレベルのオブジェクトの識別子には、インスタンスのデフォルトの照合が割り当てられます。
  • データベース内のオブジェクト(テーブル、ビュー、列名など)の識別子には、データベースのデフォルト照合が割り当てられます。

    たとえば、大文字と小文字を区別する照合を使用してデータベースに大文字と小文字の区別が異なる2つのテーブルを作成することはできますが、大文字と小文字を区別しない照合を使用してデータベースに作成することはできません。詳細については、Database Identifiersを参照してください。 変数ため

  • 識別子、GOTOは一時ストアドプロシージャ、およびサーバインスタンスの既定の照合順序である一時テーブルにラベルを付けます。

    接続コンテキストが1つのデータベースに関連付けられ、コンテキストが別のデータベースに切り替えられたときに参照されると、変数、GOTOラベル、一時ストアドプロシージャ、および一時テーブルを作成できます。

あなたは使ってサーバー照合を確認することができます。

SELECT SERVERPROPERTY('collation'); 

SQL_Latin1_General_CP1_CI_AS 
(1 row(s) affected)