2009-03-26 12 views
5

Estoy trabajando en este gran DB que tiene muchos conocimientos de negocios integrados en los SP [lo sé!] Y hay mucho encadenamiento entre los SP. es decir, un proceso almacenado que llama a otro.Cómo encontrar la lista de procedimientos almacenados que afectan a una columna en particular?

Quiero encontrar una lista de procedimientos almacenados que actualizan una columna en particular. Como podría hacerlo.

Usar showplan_Todo como se describe en SQL Table and column Parser for stored procedures no funciona para mí, porque se trata de un db de desarrollo compartido.

utilizando un Sp del maestro db escaneando el texto del sistema como se describe no es posible porque no tengo acceso al maestro db.

Entonces, ¿cómo puedo encontrar esta información?

+0

duplicado posible de [Buscar todos los procedimientos almacenados que hacen referencia a una columna específica en alguna mesa] (https://stackoverflow.com/questions/19539696/find-all-stored-procedures-that-reference -a-specific-column-in-some-table) – Matt

Respuesta

9

Has probado esto: EXEC sp_depends @objname = [table name of the column you are interested in].

Entonces, por ejemplo, si tiene una columna llamada Price en una tabla llamada Product, debe ejecutar esto: EXEC sp_depends @objname = N'Product'.

Simplemente ejecutando esto obtendrás una lista de todos los sps, vistas, etc. que dependen de esa tabla en particular.

Yo uso esta todo el tiempo, ya que trabajo con una base de datos que cuenta con más de 400 cuadros :-)

sp_depends page on MSDN

8

intentar algo como esto:

use YourDatabase; 

select [Name]  
from sys.procedures 
where object_definition([object_id]) like '%YourColumnName%'; 

Obviamente esto tiene el potencial de generar una gran cantidad de falsos positivos en función de lo que la columna se denomina pero al menos tendrá una lista de procedimientos para tamizar a través.

1

Aquí hay uno que funciona en SQL 2000+; Tenga en cuenta que a medida que Andrew señaló en su, obtendrá los falsos positivos en función de su nombre de la columna, pero es un punto de partida:

SELECT DISTINCT o.Name 
FROM syscomments c 
    JOIN sysobjects o ON c.ID = o.ID 
WHERE c.Text LIKE '%ColumnName%' 
ORDER BY o.Name 
10

de la vista del sistema sys.sql_dependencies puede obtener dependencias a nivel de la columna.

DECLARE @Schema SYSNAME 
DECLARE @Table SYSNAME 
DECLARE @Column SYSNAME 

SET @Schema = 'dbo' 
SET @Table = 'TableName' 
SET @Column = 'ColumnName' 

SELECT o.name 
FROM sys.sql_dependencies AS d 
    INNER JOIN sys.all_objects AS o ON o.object_id = d.object_id 
    INNER JOIN sys.all_objects AS ro ON ro.object_id = d.referenced_major_id 
    INNER JOIN sys.all_columns AS c ON c.object_id = ro.object_id AND c.column_id = d.referenced_minor_id 
WHERE (SCHEMA_NAME(ro.schema_id)[email protected]) 
    and o.type_desc = 'SQL_STORED_PROCEDURE' 
    and ro.name = @Table 
    and c.name = @Column 
GROUP BY o.name 
0
use msdb 
go 
select * from sysjobs j 
inner join sysjobsteps s 
on j.job_id=s.job_id 
where command like '%HBR_INSTRUMENT%' 
Cuestiones relacionadas