sql - texto - Cómo identificar todos los procedimientos almacenados que refieren una tabla particular
procedimientos almacenados sql server pdf (8)
La siguiente consulta obtendrá todos los nombres de procedimientos almacenados y la definición correspondiente de esos SP
select
so.name,
text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and UPPER(text) like ''%<TABLE NAME>%''
Creé una tabla sobre el entorno de desarrollo para fines de prueba y hay pocas sp que están revisando esta tabla. Ahora tengo que soltar esta tabla e identificar todas las sp que se refieren a esta tabla. Estoy enfrentando dificultades para encontrar la lista de todas las sp. Sugiera una consulta suponiendo que el nombre de la tabla es ''x'' y la base de datos es SQL Server 2005.
Lo siguiente funciona en SQL2008 y superior. Proporciona una lista de procedimientos y funciones almacenados.
select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
from sys.objects o inner join sys.sql_expression_dependencies sd on o.object_id = sd.referenced_id
inner join sys.objects sp on sd.referencing_id = sp.object_id
and sp.type in (''P'', ''FN'')
where o.name = ''YourTableName''
order by sp.Name
Una forma de no consulta sería usar Sql Server Management Studio.
Ubique la tabla, haga clic derecho y elija "Ver dependencias".
EDITAR
Pero, como dijeron los comentaristas, no es muy confiable.
a veces las consultas anteriores no darán el resultado correcto, existe un procedimiento almacenado incorporado disponible para obtener las dependencias de la tabla como:
EXEC sp_depends @objname = N''TableName'';
debajo de la consulta solo funciona para la tabla no para la columna
EXEC sp_depends @objname = N''TableName'';
debajo de la consulta es mejor que no se pierda nada da más pero no está mal
select distinct
so.name
--, text
from
sysobjects so,
syscomments sc
where
so.id = sc.id
and lower(text) like ''%organizationtypeid%''
order by so.name
SELECT
o.name
FROM
sys.sql_modules sm
INNER JOIN sys.objects o ON
o.object_id = sm.object_id
WHERE
sm.definition LIKE ''%<table name>%''
Solo tenga en cuenta que esto también hará aparecer los SP donde el nombre de la tabla está en los comentarios o donde el nombre de la tabla es una subcadena de otro nombre de tabla que se está usando. Por ejemplo, si tiene tablas llamadas "prueba" y "prueba_2" e intenta buscar SP con "prueba", obtendrá resultados para ambas.
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE ''%'' + ''table_name'' + ''%''
GO
Esto funcionará si tiene que mencionar el nombre de la tabla.
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%TableNameOrWhatever%''
Por cierto, este es un recurso útil para este tipo de pregunta: http://msdn.microsoft.com/en-us/library/ms345522%28v=SQL.90%29.aspx