Iver's web place

Life is a journey ... taken one shot at a time!

Calendario del Blog

September 2010
Sun Mon Tue Wed Thu Fri Sat
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2

Estadísticas de visitantes

6
12
12756

Comentarios Recientes

Buscando dependencias en SQL 2005

Continuando con el tema de SQL Server 2005 del post anterior, ahora se me antoja compartir lo que me ha "liado" cuando he tenido que hacer un refactoring a una base de datos modificada sin cuidado alguno y obvio, como está hecha por seres humanos debe tener no uno, sino mucho errores.



En fin, que la idea es encontrar las dependencias de un SP o bien de una tabla, en el caso de la tabla o vista nos basta con:


 sp_depends 'dbo.nombre_tabla'
 
Esto muestra que procedimientos llaman a la tabla.
Si por el contrario se trata de un procedimiento:
 sp_depends 'dbo.nombre_sp'
 
Esto nos regresaría [1]
Nombre columna Tipo de Dato Descripción
name nvarchar(257) Nombre del elemento para el que existe una dependencia
type nvarchar(16) Tipo del elemento
updated nvarchar(7) Si el elemento es actualizable
selected nvarchar(8) Si el elemento es usado en un select
column sysname Columna o parámetro en el que existe dependencia
Nombre Columna Tipo de Dato Descripción
name nvarchar(257) Name of the item for which a dependency exists.
type nvarchar(16) Type of the item.
Si existe alguna duda bien se puede tomar alguna base de datos de ejemplo como la de AdventureWorks y ejecutar lo siguiente:
sp_depends uspUpdateEmployeeLogin
GO
sp_depends 'HumanResources.uspUpdateEmployeeLogin'
GO
 
Como siempre existe la posibilidad de que hayan hecho marranadas en el código, entonces podemos buscar sobre el texto de los objetos para que sea más simple la localización de elementos incluidos en scripts u objetos de la base de datos:
DECLARE _at_TextToFind AS VARCHAR(300)
SELECT _at_TextToFind = 'HumanResources.Employee'
SELECT S.Name AS [Schema], P.Name, M.definition
    FROM sys.procedures P
            INNER JOIN sys.schemas S ON P.schema_id = S.schema_id
            INNER JOIN sys.sql_modules M ON M.object_id = P.object_id
    WHERE OBJECT_DEFINITION(P.object_id) LIKE '%'+_at_TextToFind+'%'
ORDER BY S.Name, P.Name
 
Enjoy your code!
[1] http://msdn.microsoft.com/es-es/library/ms189487.aspx
Trackback URI: http://es.iver.com.mx/index.php/trackback/156

Dejar un comentario

Escribe el código Captcha que estás viendo

Fuentes XML de comentario: RSS | Atom

Navegador de Archivos