2011-09-09 10 views
6

¿Hay alguna manera de encontrar qué procedimientos almacenados crean una entrada en una tabla? Decir, por ejemplo:Buscar procedimiento almacenado que se inserta en una tabla específica

procedimiento almacenado A se inserta en la Tabla A
almacenado Proceudre B Las inserciones en la Tabla A
almacenado Procedimiento C Las inserciones en la Tabla B

Quiero la consulta para devolver el nombre de procedimiento almacenado A y procedimiento almacenado B.

Tengo esto ahora mismo, pero todo lo que hace es buscar procedimientos almacenados. Creo que sería un buen punto de partida para encontrar los procedimientos almacenados.

 

select schema_name(schema_id) as [schema], 
     name 
from sys.procedures 
where name like '%Item%' and name like '%Create%' 
 

estoy usando Microsoft SQL 2008

Respuesta

9

Puede buscar sys.sql_modules que contiene el texto de todos los procs y puntos de vista:

SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE definition LIKE '%TablenameIWanttoFind%' 

Si está seguro de la redacción se puede buscar algo así como 'INSERT INTO mytable'

+0

+1 'sys.sql_modules' es la única visión que tiene el ** ** toda definición del procedimiento almacenado (en lugar de simplemente' nvarchar (4000) '), así que es realmente el único que debiera utilizar en este caso – Lamak

+0

Awesome gracias. Digamos, por ejemplo, que el procedimiento almacenado está encriptado. ¿Esta función aún podrá buscarla? – user489041

+0

@user - no estoy seguro, nunca lo intenté. Es probable que no sea así. – JNK

1

¿Por qué no utilizas la consulta de abajo.

select O.name from sysobjects O 
Join Syscomments C 
on O.id=C.id 
Where C.text like '%insert into%Table_name%' 

De esta consulta se puede encontrar literalmente procedimiento de cualquier cosa con un texto específico en ella.

0

La pregunta se pregunta cómo encontrar un procedimiento almacenado que inserta en una tabla específica.

La búsqueda de procedimientos almacenados que contengan el nombre puede devolver bastantes falsos positivos si se hace referencia a la tabla para muchas selecciones.

sys.sql_dependencies está en desuso, pero puede ser útil aquí ya que contiene un indicador is_updated que también se establece en 1 para inserciones.

SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(OBJECT_NAME(object_id)) 
FROM sys.sql_dependencies 
WHERE referenced_major_id = OBJECT_ID('YourTable') 
     AND is_updated = 1 
GROUP BY object_id 
Cuestiones relacionadas