2017-06-11 4 views
0

私はCLRストアドプロシージャを書きました(電子メールを送信するのに、DatabaseMailに依存しないと言われましたが、もっと安全だと言われました)。CLRストアドプロシージャの定義の取得

期待どおりに動作します。ここで学びたいのは、CLRオブジェクト(CLR SP、CLRスカラー関数など)から定義を取得する方法です。

私はすでにしてみました:

  • sys.sql_modules、

  • sys.system_sql_modules、

  • OBJECT_DEFINITION()

しかし、それがnullの定義を返します。 。

CLRオブジェクトの定義を得る他の方法はありますか?

+0

書きましたが、ソースコードがあります。あなたは何をしようとしているのですか? –

+0

@BenThulそうではありません。できるだけ多くのことを学ぼうとしています。 私は自分でSQL CLRを学んでいるので、スカラー関数(SQLのもの)を探しているsys.sql_modulesをチェックしていて、そこにCLRオブジェクトに関することは何もないことに気付いたのは奇妙なことです。それが実際にそれを得ることができたかどうか疑問に思った。 – soulblazer

+0

@soulblazer私は一点を明確にするために私の答えを更新しました。人々にSQLCLRの使い方を学ぶのを助けるために書いている一連の記事へのリンクを追加しました:-)。 –

答えて

1

SQLCLRオブジェクトにはT-SQLコードがないため、sys.* _sql_modules DMVまたはOBJECT_DEFINITION()組み込み関数を使用して検索することはできません。

アセンブリ内にある基礎となる.NETコードが必要な場合は、sys.assembly_filesにあります。

SELECT * 
FROM sys.assembly_files 
WHERE [file_id] = 1; 

ソースコードがない場合は、アセンブリを逆アセンブルして抽出できます。

あなたは、いくつかのDMVからつなぎ合わせする必要があるであろう、その後CREATE PROCEDURE ... AS EXTERNAL NAME ... ;文の場合:sys.assembly_modulesを、sys.typessys.parameterssys.columns。また、OBJECT_NAMEOBJECT_SCHEMA_NAMEの組み込み関数を使用する必要があります。 CREATE TYPE文を再作成する場合は、sys.assembly_types DMVを確認する必要があります。

また、一般的なSQLCLRの使用方法の詳細については、SQL Server Centralのこのトピックに関する記事を参照してください。Stairway to SQLCLR(内容を読むには無料登録が必要です)。

関連する問題