You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLR_SCALAR_FUNCTION与CLR_TABLE_VALUED_FUNCTION定义及主体位置问询

CLR标量/表值函数的主体存储位置说明

嘿,这个问题问到点子上了!和常规T-SQL函数不一样,CLR_SCALAR_FUNCTION和CLR_TABLE_VALUED_FUNCTION的核心逻辑并不是存在syscomments这类存储T-SQL文本的系统视图里,它们的函数主体其实藏在部署到SQL Server中的.NET程序集里。

具体来说:

  • 这些CLR函数的业务逻辑是用C#、VB.NET等.NET语言编写的,编译成DLL文件后,通过CREATE ASSEMBLY语句部署到SQL Server实例中。SQL Server会把这个程序集的二进制内容存储在内部系统目录里。
  • 你可以通过以下系统视图查看相关信息:
    • sys.assemblies:查看已部署的CLR程序集的基本元数据(名称、版本、权限集等)。
    • sys.assembly_files:存储程序集的二进制内容,content列就是DLL的原始二进制数据。
    • sys.assembly_modules:建立CLR函数(以及CLR存储过程、触发器等)和对应程序集模块的关联,能看到函数对应的程序集类名、方法名。

举个实用的查询例子,帮你快速找到CLR函数和其关联程序集的信息:

-- 查询所有CLR标量/表值函数及其关联的程序集详情
SELECT 
    o.name AS 函数名称,
    o.type_desc AS 函数类型,
    a.name AS 关联程序集名称,
    am.assembly_class AS 程序集中的类名,
    am.assembly_method AS 类中的方法名
FROM sys.objects o
INNER JOIN sys.assembly_modules am 
    ON o.object_id = am.object_id
INNER JOIN sys.assemblies a 
    ON am.assembly_id = a.assembly_id
WHERE o.type_desc IN ('CLR_SCALAR_FUNCTION', 'CLR_TABLE_VALUED_FUNCTION');

简单总结:CLR函数的逻辑代码在.NET程序集里,这个程序集以二进制形式被SQL Server存储,通过系统视图可以追踪到函数和程序集的关联关系,甚至能导出程序集的二进制文件还原出原始DLL。

内容的提问来源于stack exchange,提问作者Dejan Dozet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:21:51