在哪里可以找到Microsoft SQL Server中的CLR功能文本?

时间:2017-09-15 07:11:09

标签: sql-server function clr

我创建了一个应用程序来同步具有相同结构的Microsoft SQL Server数据库。我需要解决的任务之一是将任何数据库例程(过程,函数,触发器等)从源数据库传输到目标数据库。对于例行转移,我使用查询

SELECT [definition] FROM sys.sql_modules WITH (NOLOCK) WHERE object_id = OBJECT_ID('SOME_OBJECT_ID')

SELECT * FROM INFORMATION_SCHEMA.ROUTINES where routine_name like '%SOME_ROUTINE_NAME%'

除了CLR函数(具有[type_desc] = CLR_TABLE_VALUED_FUNCTION[type_desc] = CLR_SCALAR_FUNCTION的函数)之外,它适用于所有例程。

他们的文字未存储在sys.sql_modules数据表格中,系统视图INFORMATION_SCHEMA.ROUTINES包含值[ROUTINE_BODY] = EXTERNAL[ROUTINE_DEFINITION] = NULL

但是我确信每次打开CLR功能文本都不会重新创建,因为它可以通过用户更改进行更改和保存。

所以我非常感谢有关CLR功能文本位置的任何提示。

更新:我不需要传输.NET库函数本身,我只想传输在Programmability>中手动创建的包装函数。功能>表值函数。

2 个答案:

答案 0 :(得分:0)

如果要查看CLR函数或过程,需要执行一些步骤作为CLR函数,从程序集创建过程。

步骤1: - 将程序集导出到文件系统

步骤2: - 使用.net程序集反编译器,如http://ilspy.net/或红门反射器

如果程序集创建者未执行添加步骤以防止反编译,则此方法将起作用。

答案 1 :(得分:0)

Server Profiler显示了Management Studio用于构建CLR包装器功能的35种不同动态查询。因此,不幸的是,功能文本是即时构建的,没有任何内容存储在系统数据库的深处。