获取 CLR 存储过程的定义

Getting the definition of a CLR Stored Procedure

我写了一个 CLR 存储过程(发送电子邮件,而不依赖于 DatabaseMail,因为有人告诉我它更安全)。

它按预期工作。我现在想学习的是如何从CLR对象(CLR SP,CLR标量函数等)中获取定义。

我已经尝试过:

但它 returns 是一个空定义。

有没有其他方法可以获取 CLR 对象的定义?

SQLCLR 对象没有 T-SQL 代码,因此没有任何可以使用 sys.* _sql_modules DMV 或 OBJECT_DEFINITION() 内置检索的存储功能。

如果您想要底层 .NET 代码,那就是在程序集中,它位于:sys.assembly_files.

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

如果您没有源代码,可以通过反汇编程序集来提取。

如果您想要 CREATE PROCEDURE ... AS EXTERNAL NAME ... ; 语句,则需要将多个 DMV 拼凑在一起:sys.assembly_modulessys.typessys.parameterssys.columns .您还需要使用 OBJECT_NAMEOBJECT_SCHEMA_NAME 内置函数。如果您尝试重新创建 CREATE TYPE 声明,则需要检查 sys.assembly_types DMV。

此外,要了解更多关于使用 SQLCLR 的一般信息,请参阅我在 SQL Server Central 上就此主题撰写的系列文章:Stairway to SQLCLR(免费需要注册才能阅读其内容)。