我写了一个CLR存储过程(发送电子邮件,而不是依赖于DatabaseMail,因为我被告知它更安全)。
它按预期工作。我现在要学习的是如何从CLR对象(CLR SP,CLR标量函数等)获取定义。
我已经尝试过:
sys.sql_modules,
sys.system_sql_modules,
OBJECT_DEFINITION()
但它返回一个空定义。
有没有其他方法来获取CLR对象的定义?
答案 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_modules
,sys.types
,sys.parameters
,sys.columns
。您还需要使用OBJECT_NAME
和OBJECT_SCHEMA_NAME
内置函数。如果您尝试重新创建CREATE TYPE
语句,则需要检查sys.assembly_types
DMV。
另外,要了解有关使用SQLCLR的更多信息,请参阅我在SQL Server Central上撰写的关于此主题的一系列文章:Stairway to SQLCLR(阅读其内容需要免费注册)。