Saltar al contenido

SQL Server: cómo enumerar todas las funciones/procedimientos/objetos de CLR para ensamblar

Recabamos en distintos sitios para mostrarte la solución a tu problema, en caso de alguna inquietud deja la inquietud y te contestamos con gusto, porque estamos para servirte.

Solución:

Revisar la sys.assembly_modules vista:

select * from sys.assembly_modules

Esto debería enumerar todas las funciones y los ensamblajes en los que están definidas. Consulte la página de ayuda de Books Online al respecto.

Devuelve una fila para cada función, procedimiento o desencadenador definido por un ensamblado de Common Language Runtime (CLR).

Yo uso el siguiente 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]

Tenga en cuenta:

  1. Los tipos definidos por el usuario (UDT) se encuentran en: sys.assembly_types

  2. Solo puede enumerar las referencias SQLCLR que se han utilizado en CREATE TYPE declaraciones. No puede encontrar métodos SQLCLR que aún no hayan sido referenciados por un CREATE. Es decir, no puede decir: "Dame una lista de métodos en este ensamblaje para los que puedo crear objetos T-SQL".

Para obtener más información sobre cómo trabajar con SQLCLR en general, visite: Información de SQLCLR

Aquí está un script encontrado en sqlhint.com:

SELECT
        SCHEMA_NAME(O.schema_id) AS [Schema], O.name,
        A.name AS assembly_name, AM.assembly_class, 
        AM.assembly_method,
        A.permission_set_desc,
        O.[type_desc]
FROM
        sys.assembly_modules AM
        INNER JOIN sys.assemblies A ON A.assembly_id = AM.assembly_id
        INNER JOIN sys.objects O ON O.object_id = AM.object_id
ORDER BY
        A.name, AM.assembly_class

Además, tiene la opción de ver todos los lugares donde se usa ese objeto CLR.

Si para ti ha sido de provecho nuestro artículo, nos gustaría que lo compartas con más seniors de este modo nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.