0

C# で記述された SQL 2005 CLR コードを使用しています。最近、いくつかの関数を変更して NULL パラメータを許可しました。これは、パラメーターを「double」型から「SqlDecimal」型に変更することで実現しました。開発中の変更のテストに成功し、更新を運用サーバーに展開するようになりました。SQL スクリプトを使用してサーバーから既存のコードを削除し、更新されたアセンブリと関連オブジェクトを作成します。開発とテストで使用した SQL スクリプトは変更なしで本番サーバーにデプロイされていますが、そこで実行するとエラーが表示されます。

Creating CLR assemblies
Msg 6218, Level 16, State 2, Line 2
CREATE ASSEMBLY for assembly 'Company.Db.CLRStoredProcedures' failed because assembly 'Company.Db.CLRStoredProcedures' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : StoredProcedures::clrproc_OSGBtoWGS84][mdToken=0x600002e][offset 0x0000002C] Unable to resolve token.

このエラーをグーグルで検索しましたが、適切なものが見つからないようです。私たちが行った変更では、新しい参照や変更された参照はありませんでした。そのため、サーバーから欠落している何かに関連しているとは思いません。コードは以前はかなり長い間そこで機能していました。ここで何が起こっているか知っている人はいますか?

4

2 に答える 2

0

これは私自身の質問に対する答えではありませんが、何が起こっているのかの手がかりを与えてくれます。非常に便利なことに、回避策であるため、同様の状況にある人を助けるかもしれません.

上で言及した配置スクリプトは、開発データベース オブジェクトをスクリプト化することによって作成されました。それを行う代わりに、次の場合に発見しました:

  1. 開発データベースに対して実行されている SQL ステートメントをキャプチャする SQL プロファイラーを開始します。
  2. Visual Studio の「デプロイ」機能を使用して、プロジェクトを SQL Server にデプロイします。
  3. [SQL Profiler File] -> [Export] -> [Extract SQL Server Events] -> [Extract Transact-SQL Events] メニュー オプションを選択して、キャプチャされた depolyment SQL をファイルに保存します。
  4. テキスト エディタを使用してファイルを少しクリーンアップします。
  5. 取得した SQL を運用サーバーで実行します。

その後、動作します:-)

そのため、Visual Studio が生成する配置スクリプトと比較すると、オブジェクトが配置された後に作成するスクリプトにはいくつかの違いがあるはずです。

これは、「トークンを解決できません」という問題自体を説明するものではありませんが、何が起こっているのか、さらに重要なことに、それを回避する方法の手がかりを提供してくれるでしょう。

そうは言っても、「トークンを解決できません」というエラーが何を意味するのかを理解したいと思っています...

于 2010-07-30T11:40:24.170 に答える