获取 CLR 存储过程的定义
Getting the definition of a CLR Stored Procedure
我写了一个 CLR 存储过程(发送电子邮件,而不依赖于 DatabaseMail,因为有人告诉我它更安全)。
它按预期工作。我现在想学习的是如何从CLR对象(CLR SP,CLR标量函数等)中获取定义。
我已经尝试过:
sys.sql_modules,
sys.system_sql_modules,
OBJECT_DEFINITION()
但它 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_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(免费需要注册才能阅读其内容)。
我写了一个 CLR 存储过程(发送电子邮件,而不依赖于 DatabaseMail,因为有人告诉我它更安全)。
它按预期工作。我现在想学习的是如何从CLR对象(CLR SP,CLR标量函数等)中获取定义。
我已经尝试过:
sys.sql_modules,
sys.system_sql_modules,
OBJECT_DEFINITION()
但它 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_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(免费需要注册才能阅读其内容)。