在哪里可以找到 Microsoft SQL 服务器中的 CLR 函数文本?

Where can I find CLR function text in Microsoft SQL Server?

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

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 库函数本身,我只想传输在可编程性 > 函数 > Table 值函数中手动创建的包装函数。

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

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

第 2 步:- 使用 .net 程序集反编译器,如 http://ilspy.net/ 或 redgate reflector

如果程序集创建者没有执行添加步骤来防止反编译,则此方法将有效。

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