获取CLR存储过程的定义

时间:2017-06-11 20:43:11

标签: sql-server ddl sqlclr

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

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

我已经尝试过:

  • sys.sql_modules,

  • sys.system_sql_modules,

  • OBJECT_DEFINITION()

但它返回一个空定义。

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

1 个答案:

答案 0 :(得分:1)

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

如果你想要底层的.NET代码,那就在Assembly中,它位于: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(阅读其内容需要免费注册)。