2

ねえ、照合に関連しているように見える問題が発生していますが、よくわかりません。

実稼働データベースのバックアップに対して開発しています。SQL Server 2005 環境での唯一の違い (私が現在認識している) は、私のローカルホストには照合として "SQL_Latin1_General_CP1_CS_AS" (大文字と小文字を区別する) があり、運用環境には "SQL_Latin1_General_CP1_CI_AS" (大文字と小文字を区別しない) があることです。

ストアド プロシージャをローカルで実行すると、"Must Declare Scalar Variable "@firstName"" エラーがスローされます。

変数「@FirstName」宣言されています。

さて、データベース自体は照合として「SQL_Latin1_General_CP1_CI_AS」であるのに、大文字と小文字を区別しないコンテキストでストアド プロシージャが実行されないのはなぜですか?

私はこれをオンラインで調べましたが、基本的には SQLserver を再構築する必要があると言われています。

照合のためにデータベース コンテキストがサーバー コンテキストより優先されるべきではありませんか?

ところで、master と tempdb はどちらも "SQL_Latin1_General_CP1_CS_AS" 大文字と小文字を区別します。

4

1 に答える 1

1

これは悪い状況です。照合を制御しない場合 (一時テーブルへの SELECT INTO など) は、varchar を使用して何かを実行しようとすると壊れます。サーバーの既定の照合順序は、照合順序を明示的に強制しない場合に優先されます。これは、既存のストアド プロシージャ コードのすべてではないにしてもほとんどの場合です。

この問題の通常の解決策は、正しい照合順序で SQL Server インスタンスを再インストールすることです。はい、本当にそうする必要があります。これに関する私の知識は二次的なものですが、(この問題に関与する MS テクニカル サポートを受けた人から) SQL Server インスタンスの既定の照合順序を変更することは技術的に可能ですが、プロセスは技術的でエラーが発生しやすいということを理解しています。間違えると、サーバーが使用できない状態になる可能性があります。どうやら、この手順は Microsoft によって正式にサポートされておらず、推奨される手順は SQL Server インスタンスを再インストールすることです。

于 2008-12-08T19:54:09.263 に答える