如何从数据库中获取 SQL CLR 函数的定义
How can I get the definition of a SQL CLR function from the database
我为一个 SQL CLR 项目提供的代码包含一个函数,其中 . However I have been able run a query 用于确认服务器上存在一个名称为无效函数的函数。
Schema name assembly_name assembly_class assembly_method permission_set_desc type_desc
dbo ConvertFromUTC database AppName.Database.Functions ConvertFromUTC UNSAFE_ACCESS CLR_SCALAR_FUNCTION
这些信息足以确认部署的版本是标量函数,而不是怀疑的 table。
有什么方法可以从数据库中加载的版本中获取 input/output 参数,以确保正确的版本是我在上一个问题中建议的版本,而不是其他版本?更一般地说,我希望能够为数据库中的所有其他 CLR 函数获得相同的结果,以查看它们是否与我给出的代码不匹配。
有几种不同的 SQLCLR 对象类型,因此这需要一些查询。获取定义的最快和最简单的方法,尤其是对于一次性操作,是通过 SQL Server Management Studio (SSMS) 编写对象脚本。您应该能够 select "Object Explorer Details" 中的所有特定类型并将它们一起编写出来。
或者,要一次完成所有类型的所有 SQLCLR 对象,请转到常规 "Generate Scripts":
- 在对象资源管理器中右键单击数据库
- 转到 "Tasks >" 子菜单
- Select "Generate Scripts..."
- 选择"Select specific database objects"
- 深入了解各种对象类型——存储过程、用户定义的函数、用户定义的类型和用户定义的聚合——并检查你想要编写脚本的对象
- 点击"Next >"
- 选择您喜欢的保存/查看方式
- 点击"Next >"
- 点击"Next >"(再次审核后)
- 点击"Finish"
对于用户定义聚合 (UDA) 和标量用户定义函数 (UDF),您可以使用以下查询(请记住 0
的 parameter_id
是 return类型):
SELECT OBJECT_NAME(am.[object_id]) AS [Name], am.*, p.*, t.[name] AS [DataType]
FROM sys.assembly_modules am
INNER JOIN sys.parameters p
ON p.[object_id] = am.[object_id]
INNER JOIN sys.types t
ON t.[user_type_id] = p.[user_type_id]
WHERE OBJECT_NAME(am.[object_id]) = N'{function_name}';
我为一个 SQL CLR 项目提供的代码包含一个函数,其中
Schema name assembly_name assembly_class assembly_method permission_set_desc type_desc
dbo ConvertFromUTC database AppName.Database.Functions ConvertFromUTC UNSAFE_ACCESS CLR_SCALAR_FUNCTION
这些信息足以确认部署的版本是标量函数,而不是怀疑的 table。
有什么方法可以从数据库中加载的版本中获取 input/output 参数,以确保正确的版本是我在上一个问题中建议的版本,而不是其他版本?更一般地说,我希望能够为数据库中的所有其他 CLR 函数获得相同的结果,以查看它们是否与我给出的代码不匹配。
有几种不同的 SQLCLR 对象类型,因此这需要一些查询。获取定义的最快和最简单的方法,尤其是对于一次性操作,是通过 SQL Server Management Studio (SSMS) 编写对象脚本。您应该能够 select "Object Explorer Details" 中的所有特定类型并将它们一起编写出来。
或者,要一次完成所有类型的所有 SQLCLR 对象,请转到常规 "Generate Scripts":
- 在对象资源管理器中右键单击数据库
- 转到 "Tasks >" 子菜单
- Select "Generate Scripts..."
- 选择"Select specific database objects"
- 深入了解各种对象类型——存储过程、用户定义的函数、用户定义的类型和用户定义的聚合——并检查你想要编写脚本的对象
- 点击"Next >"
- 选择您喜欢的保存/查看方式
- 点击"Next >"
- 点击"Next >"(再次审核后)
- 点击"Finish"
对于用户定义聚合 (UDA) 和标量用户定义函数 (UDF),您可以使用以下查询(请记住 0
的 parameter_id
是 return类型):
SELECT OBJECT_NAME(am.[object_id]) AS [Name], am.*, p.*, t.[name] AS [DataType]
FROM sys.assembly_modules am
INNER JOIN sys.parameters p
ON p.[object_id] = am.[object_id]
INNER JOIN sys.types t
ON t.[user_type_id] = p.[user_type_id]
WHERE OBJECT_NAME(am.[object_id]) = N'{function_name}';