4

いくつかの顧客サイトで問題なく機能する製品のインストールで問題が発生しました。この問題は、データベースサーバーの照合設定に関係していると思います。私はこのようなコードを持っています(コードはプロプライエタリであるため、テーブルと変数の名前を変更しました):

using (SqlCommand insertCommand = dbConnection.CreateCommand())
{
    insertCommand.CommandText = "INSERT INTO [myTable] ([valueOne] ,[valueTwo] ,[CreationDate]) VALUES (@valueTwo ,@valueTwo ,@creationDate);select IDENT_CURRENT('myTable');";
    insertCommand.Parameters.AddWithValue("@valueOne", "Value One");
    insertCommand.Parameters.AddWithValue("@valueTwo", "Value Two");
    insertCommand.Parameters.AddWithValue("@CreationDate", CreationDate);                    
    dbConnection.Open();
    object result = insertCommand.ExecuteScalar();
    dbConnection.Close();
}

これはほとんどのサイトと開発およびQAマシンで機能しますが、この1つのサイトで、「スカラー変数 "@creationDate"を宣言する必要があります」というエラーが表示されます。主な不一致は、サイトの照合値がSQL_Latin1_General_CP1_CS_ASに設定されていることです。設定はすべてSQL_Latin1_General_CP1_CI_ASです。これをデータベース用に変更しましたが、サーバーでは大文字と小文字が区別されるバリエーションに設定されています。これにより、別のテーブルで発生していた別の問題が解決されました(1つはパラメーター名ではなくテーブル名でした) 、しかし、何らかの理由で、これにはまだ問題があります。コードベースの大文字と小文字の違いをすべて調べて修正するよりも、これを少し早く解決する方法について誰かがアイデアを持っていますか?

このサイトはSQLServer2005を使用しており、コードはC#および.NET3.5で記述されています。

ありがとう-ホリス

4

2 に答える 2

4

サーバーの照合がそれらを制御します。これは仕様によるものです。

BOL(強調鉱山)から:

識別子の照合は、それが定義されているレベルによって異なります。ログインやデータベース名などのインスタンスレベルのオブジェクトの識別子には、インスタンスのデフォルトの照合が割り当てられます。テーブル、ビュー、列名など、データベース内のオブジェクトの識別子には、データベースのデフォルトの照合が割り当てられます。変数、GOTOラベル、一時ストアドプロシージャ、および一時テーブルは、接続コンテキストが1つのデータベースに関連付けられているときに作成し、コンテキストが別のデータベースに切り替えられたときに参照できます。したがって、変数、GOTOラベル、および一時テーブルの識別子は、インスタンスのデフォルトの照合に含まれます。

于 2012-04-03T21:52:03.473 に答える
2

変数の大文字と小文字の区別は、データベースレベルではなく、サーバーレベルの照合によって制御されます。同じトピックに関するこの質問を参照してください。

于 2012-04-03T21:42:46.070 に答える