Ver las dependencias de un procedimiento almacenado

Se aplica a: SQL Server Azure SQL Database Not supported. Azure Synapse Analytics Analytics Platform System (PDW)

Este tema describe cómo ver las dependencias de un procedimiento almacenado en SQL Server mediante SQL Server Management Studio o Transact-SQL.

Antes de empezar

Limitaciones y restricciones

Seguridad

Permisos

Función del sistema: sys.dm_sql_referencing_entities
Requiere el permiso CONTROL en la entidad a la que se hace referencia y el permiso SELECT en sys.dm_sql_referencing_entities. Cuando la entidad a la que se hace referencia es una función de partición, se requiere el permiso CONTROL en la base de datos. De forma predeterminada, se concede el permiso SELECT a public.

Función del sistema: sys.dm_sql_referenced_entities
Requiere el permiso SELECT en sys.dm_sql_referenced_entities y el permiso VIEW DEFINITION en la entidad de referencia. De forma predeterminada, se concede el permiso SELECT a public. Requiere el permiso VIEW DEFINITION en la base de datos o el permiso ALTER DATABASE DDL TRIGGER en la base de datos si la entidad de referencia es un desencadenador DDL de base de datos. Requiere el permiso VIEW ANY DEFINITION en el servidor si la entidad de referencia es un desencadenador DDL de servidor.

Vista de catálogo de objetos: sys.sql_expression_dependencies
Necesita el permiso VIEW DEFINITION en la base de datos y el permiso SELECT en sys.sql_expression_dependencies para la base de datos. De forma predeterminada, solo se permite el permiso SELECT a los miembros del rol fijo de base de datos db_owner. Si se conceden los permisos SELECT y VIEW DEFINITION a otro usuario, el receptor puede ver todas las dependencias de la base de datos.

Cómo ver las dependencias de un procedimiento almacenado

Puede usar cualquiera de los siguientes medios:

Uso de SQL Server Management Studio

Para ver las dependencias de un procedimiento en el Explorador de objetos

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento y, a continuación, expanda Programación.

  3. Expanda Procedimientos almacenados, haga clic con el botón derecho en el procedimiento y, luego, haga clic en Ver dependencias.

  4. Examine la lista de objetos que dependen del procedimiento.

  5. Examine la lista de objetos de los cuales depende el procedimiento.

  6. Haga clic en OK.

Usar Transact-SQL

Este artículo requiere la base de datos de ejemplo AdventureWorks2022 que se puede descargar de la página principal de ejemplos y proyectos de la comunidad de Microsoft SQL Server.

Para ver las dependencias de un procedimiento en el Editor de consultas

Función del sistema: sys.dm_sql_referencing_entities
Esta función se usa para mostrar los objetos que dependen de un procedimiento.

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.

  3. En el menú Archivo , haga clic en Nueva consulta .

  4. Copie y pegue los ejemplos siguientes en el editor de consultas. El primer ejemplo crea el procedimiento uspVendorAllInfo, que devuelve los nombres de todos los proveedores en la base de datos Adventure Works Cycles, los productos que suministran, su solvencia y su disponibilidad.

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. Después de crear el procedimiento, el segundo ejemplo usa la función sys.dm_sql_referencing_entities para mostrar los objetos que dependen del procedimiento.

    USE AdventureWorks2022;  
    GO  
    SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
    FROM sys.dm_sql_referencing_entities ('Purchasing.uspVendorAllInfo', 'OBJECT');   
    GO  
    
    

Función del sistema: sys.dm_sql_referenced_entities
Esta función se usa para mostrar los objetos de los que depende un procedimiento.

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.

  3. En el menú Archivo , haga clic en Nueva consulta .

  4. Copie y pegue los ejemplos siguientes en el editor de consultas. El primer ejemplo crea el procedimiento uspVendorAllInfo, que devuelve los nombres de todos los proveedores en la base de datos Adventure Works Cycles, los productos que suministran, su solvencia y su disponibilidad.

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. Después de crear el procedimiento, el segundo ejemplo usa la función sys.dm_sql_referenced_entities para mostrar los objetos de los que depende el procedimiento.

    USE AdventureWorks2022;  
    GO  
    SELECT referenced_schema_name, referenced_entity_name,  
    referenced_minor_name,referenced_minor_id, referenced_class_desc,  
    is_caller_dependent, is_ambiguous  
    FROM sys.dm_sql_referenced_entities ('Purchasing.uspVendorAllInfo', 'OBJECT');  
    GO  
    

Vista de catálogo de objetos: sys.sql_expression_dependencies
Esta vista se puede usar para mostrar los objetos de los que depende un procedimiento o que dependen de un procedimiento.

Mostrar los objetos que dependen de un procedimiento.

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.

  3. En el menú Archivo , haga clic en Nueva consulta .

  4. Copie y pegue los ejemplos siguientes en el editor de consultas. El primer ejemplo crea el procedimiento uspVendorAllInfo, que devuelve los nombres de todos los proveedores en la base de datos Adventure Works Cycles, los productos que suministran, su solvencia y su disponibilidad.

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. Después de crear el procedimiento, el segundo ejemplo usa la vista sys.sql_expression_dependencies para mostrar los objetos que dependen del procedimiento.

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
        OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_desciption,   
        COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
        referencing_class_desc, referenced_class_desc,  
        referenced_server_name, referenced_database_name, referenced_schema_name,  
        referenced_entity_name,   
        COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
        is_caller_dependent, is_ambiguous  
    FROM sys.sql_expression_dependencies AS sed  
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
    WHERE referenced_id = OBJECT_ID(N'Purchasing.uspVendorAllInfo')  
    GO  
    

Mostrar los objetos de los que depende un procedimiento.

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.

  3. En el menú Archivo , haga clic en Nueva consulta .

  4. Copie y pegue los ejemplos siguientes en el editor de consultas. El primer ejemplo crea el procedimiento uspVendorAllInfo, que devuelve los nombres de todos los proveedores en la base de datos Adventure Works Cycles, los productos que suministran, su solvencia y su disponibilidad.

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. Después de crear el procedimiento, el segundo ejemplo usa la vista sys.sql_expression_dependencies para mostrar los objetos de los que depende el procedimiento.

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_desciption,   
        COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
        referencing_class_desc, referenced_class_desc,  
        referenced_server_name, referenced_database_name, referenced_schema_name,  
        referenced_entity_name,   
        COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
        is_caller_dependent, is_ambiguous  
    FROM sys.sql_expression_dependencies AS sed  
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
    WHERE referencing_id = OBJECT_ID(N'Purchasing.uspVendorAllInfo');  
    GO  
    

Consulte también

Cambiar el nombre de un procedimiento almacenado
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)