Análisis de dependencias en SQL Server


Ocurre en determinadas ocasiones que realizamos un cambio en nuestra base de datos SQL Server; y desconocemos las implicaciones que tiene en la base de datos.

El siguiente script nos permite determinar el nivel de afectación de un cambio; nos retorna el resultado por niveles. En el primer nivel las dependencias directas, en segundo nivel las dependencias del primer nivel y así sucesivamente.

-- View Dependences of Object Database element
DECLARE @NAME varchar(250)
-- Assign Object Database element name
set @NAME = 'dbo.Cliente'

DECLARE @LEVEL int
DECLARE @COUNTAnt int
DECLARE @COUNT int
DECLARE @NAMEITEM varchar(250)
set @LEVEL = 0
set @COUNTAnt = 0
set @COUNT = 0

SELECT referencing_schema_name, referencing_entity_name,
referencing_id, referencing_class_desc, is_caller_dependent, @LEVEL as 'level'
INTO #DEPENCENDE
FROM sys.dm_sql_referencing_entities (@name, 'OBJECT');

SET @COUNTAnt = @COUNT
SELECT @COUNT = COUNT(*) FROM #DEPENCENDE

WHILE (@COUNTAnt <> @COUNT)
	BEGIN

		DECLARE DEPENDS CURSOR
			FOR
			SELECT referencing_entity_name FROM #DEPENCENDE WHERE level = @LEVEL

		OPEN DEPENDS
		FETCH NEXT FROM DEPENDS into @NAMEITEM
		WHILE (@@FETCH_STATUS = 0)
			BEGIN
				INSERT INTO #DEPENCENDE
				SELECT DEP.referencing_schema_name, DEP.referencing_entity_name, DEP.referencing_id, DEP.referencing_class_desc, DEP.is_caller_dependent, @LEVEL +1
				FROM sys.dm_sql_referencing_entities ('dbo.' +@NAMEITEM, 'OBJECT') DEP
				LEFT JOIN #DEPENCENDE DT ON DEP.referencing_entity_name = DT.referencing_entity_name
				WHERE DT.referencing_entity_name IS NULL
				FETCH NEXT FROM DEPENDS into @NAMEITEM
			END

		CLOSE DEPENDS
		DEALLOCATE DEPENDS

		SET @LEVEL = @LEVEL + 1
		SET @COUNTAnt = @COUNT
		SELECT @COUNT = COUNT(*) FROM #DEPENCENDE

	END

SELECT referencing_entity_name, level FROM #DEPENCENDE
ORDER BY LEVEL

DROP TABLE #DEPENCENDE

Retorno del Script

Al ejecutar el script se retorna:

EliminarCliente 0
VistaBasicaCliente 0
VistaTopCliente 1
EliminarClientes 1
VistaVipCliente 1
VistaVipTopCliente 2

Nota:

Este script no está disponible para SQL Azure; dado que se apoya en la funcion sys.dm_sql_referenced_entities que no está soportada.

Anuncios
Esta entrada fue publicada en Desarrollo, Sql Server y etiquetada , . Guarda el enlace permanente.

Una respuesta a Análisis de dependencias en SQL Server

  1. victorxata dijo:

    Parece super-útil Rodri, lo probaré pronto, Gracias!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s