3

この形式の SQL コマンドを実行すると: SP_HELPTEXT Sproc1. 結果セットが表示されますCould not find stored procedure 'SP_HELPTEXT'。しかし、SQL コマンドを のように小文字に置き換えると、sp_helptext Sproc1間違いなく Sproc1 の内容が表示されます。

プログラムでを使用しています。Sproc1プログラムを実行Sproc1すると、次のメッセージが返されます。

Must declare the variable '@Variable1'. 

私はすでにその特定の変数を宣言していますが。

問題が照合、大文字と小文字を区別する、または区別しない設定に関連しているというヒントがあります。解決方法を知っている人はいますか?


大文字と小文字を区別する変数名が表示される別の状況:

CREATE PROCEDURE Foo @customerID int AS
PRINT @customerId
4

1 に答える 1

4

大文字と小文字を区別するサーバー照合があります。

あなたのデータベースには(あなたが示したように)大文字と小文字を区別しない照合がありますが、変数に大文字と小文字の問題がある場合、重要なのはサーバーの照合です。

sp_helptextデータベースマスターで小文字で定義されたストアドプロシージャについても同じことが言えます。だからあなたが呼ぶときSP_HELPTEXTそれは見つかりません。

大文字と小文字を区別するサーバー照合で機能するようにストアドプロシージャを修正するには、変数へのすべての参照@Variable1が正確にそれであることを確認する必要があります。そうではない@variable1@VARIABLE1

これを使用して、使用しているサーバー照合を確認します。

SELECT SERVERPROPERTY('collation');

SQL Server Books Onlineから:

COLLATE(Transact-SQL)

識別子の照合は、それが定義されているレベルによって異なります。

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

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

  • 変数GOTOラベル一時ストアドプロシージャ、および一時テーブルの識別子は、サーバーインスタンスのデフォルトの照合に含まれています。

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

も参照してください

于 2013-01-11T06:53:28.803 に答える