当前位置:  开发笔记 > 编程语言 > 正文

SQL Server:如何列出所有CLR函数/过程/对象以进行汇编

如何解决《SQLServer:如何列出所有CLR函数/过程/对象以进行汇编》经验,为你挑选了2个好方法。

问题:在SQL Server 2005中,如何列出使用程序集xy的所有SQL CLR函数/过程(例如MyFirstUdp)?

例如,为查询参数MyFirstUdp列出HelloWorld的函数

CREATE PROCEDURE HelloWorld
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].HelloWorld
GO

我跑了之后

CREATE ASSEMBLY MyFirstUdp FROM 'C:\Users\username\Documents\Visual Studio 2005\Projects\SQL_CLRdll\SQL_CLRdll\bin\Debug\SQL_CLRdll.dll

我可以列出所有程序集和所有函数/过程,但我似乎无法将程序集与函数/过程相关联...



1> marc_s..:

查看sys.assembly_modules视图:

select * from sys.assembly_modules

这应列出所有功能及其定义的程序集.请参阅联机丛书帮助页面.

为公共语言运行库(CLR)程序集定义的每个函数,过程或触发器返回一行.


仅供参考:用户定义类型(UDT)可在`sys.assembly_types`中找到,而不是在`sys.assembly_modules`中找到.

2> Solomon Rutz..:

我使用以下SQL:

SELECT      so.name AS [ObjectName],
            so.[type],
            SCHEMA_NAME(so.[schema_id]) AS [SchemaName],
            asmbly.name AS [AssemblyName],
            asmbly.permission_set_desc,
            am.assembly_class, 
            am.assembly_method
FROM        sys.assembly_modules am
INNER JOIN  sys.assemblies asmbly
        ON  asmbly.assembly_id = am.assembly_id
        AND asmbly.is_user_defined = 1 -- if using SQL Server 2008 or newer
--      AND asmbly.name NOT LIKE 'Microsoft%' -- if using SQL Server 2005
INNER JOIN  sys.objects so
        ON  so.[object_id] = am.[object_id]
UNION ALL
SELECT      at.name AS [ObjectName],
            'UDT' AS [type],
            SCHEMA_NAME(at.[schema_id]) AS [SchemaName], 
            asmbly.name AS [AssemblyName],
            asmbly.permission_set_desc,
            at.assembly_class,
            NULL AS [assembly_method]
FROM        sys.assembly_types at
INNER JOIN  sys.assemblies asmbly
        ON  asmbly.assembly_id = at.assembly_id
        AND asmbly.is_user_defined = 1 -- if using SQL Server 2008 or newer
--      AND asmbly.name NOT LIKE 'Microsoft%' -- if using SQL Server 2005
ORDER BY    [AssemblyName], [type], [ObjectName]

请注意:

    用户定义类型(UDT)位于:sys.assembly_types中

    您只能列出已在CREATE语句中使用的CLR引用.您找不到CREATE尚未引用的CLR方法.意思是,你不能说:"给我一个方法列表,我可以为这个程序集创建SQL对象".

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有