VS2008で作ったCLR関数やSPをSQL Server 2005に登録できない

Visual Studio 2008でアセンブリを作成し、その関数をSQL Server 2005でCLR関数(CREATE FUNCTION)やCLRストアドプロシージャ(CREATE PROCEDURE)として登録しようとすると、以下のようなエラーになります。

メッセージ 6505、レベル 16、状態 1、プロシージャ ProcedureName、行 1
型 ‘ClassName’ がアセンブリ ‘AssemblyName’ に見つかりませんでした。

どうしたものかと途方に暮れたりもしましたが、結局原因がわかりました。
実はクラスをnamespaceに入れていたのですが、これだとEXTERNAL NAMEの指定を次のようにしなければなりません。

AssemblyName.[NamespaceName.ClassName].StaticMethodName

このようにしたくないなら、クラスをnamespaceに含めないようにするのがいいようです。そうすれば素直に

AssemblyName.ClassName.StaticMethodName

のようにできます。

参考: CLR integration – Could not find Type ‘??’ in assembly ‘??’.

実はこの問題、プロジェクトを新規作成するときにSQL Server プロジェクトを選択しておけば、あまりトラブルにはなりません。プロジェクトにCLRストアドプロシージャやCLRユーザ定義関数用のクラスを追加すると、追加されるソースのひな形がnamespaceの指定が入っていないものになるからです。
しかしSQL Serverプロジェクトは参照の追加に制限があるので使い勝手が悪く、私はほとんど使っていません。そのおかげでこんな苦労をしたわけです。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください