查找插入特定表的存储过程

问题描述 投票:0回答:6

有没有办法找到哪些存储过程在表中创建了条目。举例来说:

存储过程A插入表A
存储的过程 B 插入表 A
存储过程 C 插入表 B

我希望查询返回存储过程A和存储过程B的名称。

我现在已经得到了这个,但它所做的只是查找存储过程。我认为这将是查找存储过程的一个很好的起点。


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

我正在使用 Microsoft SQL 2008

sql sql-server database sql-server-2008 stored-procedures
6个回答
16
投票

您可以搜索

sys.sql_modules
,其中包含所有过程和视图的文本:

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

如果您确定措辞,您可以搜索类似

'INSERT INTO mytable'

的内容

10
投票

问题询问如何查找“插入”到特定表中的存储过程。 如果多次选择引用该表,则搜索包含该名称的存储过程可能会返回相当多的误报。

sys.sql_dependencies

已弃用,但在这里可能很有用,因为它包含一个

is_updated
标志,该标志也设置为
1
用于插入。

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



6
投票


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

从这个查询中,您实际上可以找到其中包含特定文本的任何过程。


1
投票

感谢 JNK,我修改了脚本,如下所示:

SELECT OBJECT_NAME(object_id) name ,case xtype when 'AF' then 'Aggregate Function (CLR)' when 'C' then 'CHECK Constraint' when 'D' then 'Default or DEFAULT Constraint' when 'F' then 'FOREIGN KEY Constraint' when 'L' then 'Log' when 'FN' then 'Scalar Function' when 'FS' then 'Assembly (CLR) scalar-Function' when 'FT' then 'Assembly (CLR) Table-valued Function' when 'IF' then 'In-lined Table-Function' when 'IT' then 'Internal Table' when 'P' then 'Stored Procedure' when 'PC' then 'Assembly (CLR) Stored-Procedure' when 'PK' then 'PRIMARY KEY Constraint (Type is K)' when 'RF' then 'Replication filter Stored Procedure' when 'S' then 'System Table' when 'SN' then 'Synonym' when 'SQ' then 'Service Queue' when 'TA' then 'Assembly (CLR) DML Trigger' when 'TF' then 'Table Function' when 'TR' then 'SQL DML Trigger' when 'TT' then 'Table Type' when 'U' then 'User Table' when 'UQ' then 'UNIQUE Constraint (Type is K)' when 'V' then 'View' when 'X' then 'Extended Stored Procedure' else '' end [xtype description] FROM sys.sql_modules, sysobjects where sql_modules.object_id = sysobjects.id and definition LIKE '%InvNum%' order by xtype,OBJECT_NAME(object_id)

结果显示如下:


1
投票

GRANT VIEW SERVER STATE TO databaseuser Select top 10 dest.objectid, DB_Name(dest.[dbid]) As 'databaseName' , Object_Name(dest.objectid, dest.[dbid]) As 'procName' , Max(deqs.last_execution_time) As 'last_execution' From sys.dm_exec_query_stats As deqs Cross Apply sys.dm_exec_sql_text(deqs.sql_handle) As dest Join sys.sql_dependencies as sqldep on sqldep.object_id = dest.objectid Where dest.[text] Like '%CashProduct%' -- replace And dest.[dbid] Is Not Null -- exclude ad-hocs And DB_Name(dest.[dbid]) = 'DatabaNameDu' And sqldep.is_updated = 1 Group By db_name(dest.[dbid]) , Object_Name(dest.objectid, dest.[dbid]), dest.objectid Order By Max(deqs.last_execution_time) desc Option (MaxDop 1);



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.