Ver las dependencias de un procedimiento almacenado
En este tema se describe cómo ver las dependencias de procedimientos almacenados en SQL Server 2014 mediante SQL Server Management Studio o Transact-SQL.
Antes de comenzar: Seguridad
Para ver las dependencias de un procedimiento, mediante: SQL Server Management Studio, Transact-SQL
Antes de empezar
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
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento y, a continuación, expanda Programación.
Expanda Procedimientos almacenados, haga clic con el botón derecho en el procedimiento y, luego, haga clic en Ver dependencias.
Examine la lista de objetos que dependen del procedimiento.
Examine la lista de objetos de los cuales depende el procedimiento.
Haga clic en OK.
Usar Transact-SQL
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.
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.
En el menú Archivo , haga clic en Nueva consulta .
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 AdventureWorks2012; 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
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 AdventureWorks2012; 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.
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.
En el menú Archivo , haga clic en Nueva consulta .
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 AdventureWorks2012; 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
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 AdventureWorks2012; 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_referencing_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.
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.
En el menú Archivo , haga clic en Nueva consulta .
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 AdventureWorks2012; 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
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 AdventureWorks2012; 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.
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento.
En el menú Archivo , haga clic en Nueva consulta .
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 AdventureWorks2012; 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
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 AdventureWorks2012; 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)