¿Cómo obtener todas las dependencias de las tablas que usan mis Procedimientos Almacenados?

publicado por: Anonymous

Estoy buscando alguna herramienta o método para mapear la relación entre procedimiento almacenado, tablas y columnas. Saber cuales son usadas en select, update, insert o delete.

Encontre que SQL server ya proporciona algo parecido

sp_depends ‘dbo.procedure_1’

Pero este no me es útil, ya que muchos de mis procedimientos almacenados usan tablas ubicadas en otras base de datos y esas tablas no las toma en cuenta y la información de sp_depends no es muy completa que digamos y algo confusa.

Estoy trabajando con SQL Server 2008.

solución

En tal caso puedes hacer uso de la consulta siguiente:

Select table_name 
from MiOtraBD.information_schema.tables

Y con un cursor o bucle while, recorrer la tabla syscomments que en la columna text posee todos los códigos T-SQL de tus objetos programables. Te dejo el siguiente ejemplo como referencia:

declare @tabla varchar(50),
        @qry varchar(max)

declare @resultado table(Objeto varchar(50), Tabla varchar(50), Accion varchar(12))


declare crTablas cursor for
select table_name
from INFORMATION_SCHEMA.TABLES

open crTablas
fetch next from crTablas into @tabla

while @@fetch_status = 0
begin
    set @qry = '
                select  object_name(id) as Objeto, ' + 
                quotename(@tabla, char(39)) + ',
                case
                    when [text] like ''%update ' + @tabla + '%' + '''  then ''Actualiza''
                    when [text] like ''%insert ' + @tabla + '%' + '''   then ''Inserta''
                    when [text] like ''%delete ' + @tabla + '%' + '''    then ''Elimina''
                  else ''Selecciona''
                end as Accion
                from syscomments 
                where [Text] like ''%' + @tabla + '%'' '
    insert into @resultado
    exec(@qry)

    fetch next from crTablas into @tabla
end
select * from @resultado
close crTablas
deallocate crTablas
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *