martes, 6 de febrero de 2018

Devolver las entidades que hacen referencia a una entidad determinada, aunque se encuentre en SQL Dinámico

Posted by InfoTacticas Soluciones  |  No comments

Para devolver las entidades que hacen referencia a una entidad determinada, como una tabla, se utiliza sp_depends en T-SQL. SP_DEPENDS muestra las dependencias de los objetos de la base de datos, tales como las vistas y procedimientos que dependen de una tabla o de una vista, y las tablas y vistas de las que depende la vista o el procedimiento. Las referencias a objetos que no se encuentran en la base de datos actual no se notifican. Sin embargo, se recomienda usar, en lugar de SP_DEPENDS, sys.dm_sql_referencing_entities y sys.dm_sql_referenced_entities.
En mi experiencia prefiero usar las vistas del sistema: syscomments y sysobjects para buscar los objetos que hacen referencia a una tabla o vista en cuestión, la ventaja de hacerlo de este modo es que encuentra las dependencias incluso si estas están en citadas en cadenas de texto a ser usadas en SQL Dinámico.
A continuación muestro ejemplos y resultados de usar las 3 alternativas mencionadas, para encontrar referencias a la tabla sp_depends MIGRACION_INCREMENTAL_TABLAS:
Usando sp_depends

--
--
sp_depends MIGRACION_INCREMENTAL_TABLAS

El Resultado:

Usando sys.dm_sql_referencing_entities
--
--
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.MIGRACION_INCREMENTAL_TABLAS', 'OBJECT');
GO


El Resultado:


Usando las vistas syscomments y sysobjects
--
--
select name, c.id, c.text, o.xtype, o.crdate
from syscomments c 
join sysobjects o on c.id = o.id 
where c.TEXT like '%MIGRACION_INCREMENTAL_TABLAS%' 


El Resultado:

Además, se puede apreciar que sp_depends no lista todos los procedimientos almacenados que dependen de la tabla de ejemplo, he tenido que borrar el procedimiento almacenado y volverlo a generar para que lo reconozca, como en el caso del procedimiento: PROC_MIGRACION_INCREMENTAL_CONSULTAR. El Procedimiento Almacenado: proc_prueba no es listado por sp_depends porque la referencia a la tabla está en una variable de texto.
--
--
create procedure proc_prueba
as
begin
 DECLARE @VARIABLE nvarchar(2000)
 set @VARIABLE = 'select * from MIGRACION_INCREMENTAL_TABLAS'
end 

2/06/2018 06:09:00 a. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top