检查数据库上的任何存储过程是否修改某个列

时间:2015-01-02 17:15:14

标签: sql-server sql-server-2008 stored-procedures

有没有办法编写一个查询,告诉我数据库中修改某个列的任何存储过程的名称?该工作数据库在系统存储过程下列出了1300多个存储过程,然后是另外两个未列在其下的存储过程。我需要知道哪一个修改了列" CustomFlag 1"。

出于某种原因,每隔6个月这个列被清除掉每个条目,所以我的假设是存储过程正在执行此操作并想知道哪一个我们可以修复它。

这是在使用SSMS 2008的SQL Server 2008上。

2 个答案:

答案 0 :(得分:1)

生成数据库模式的脚本,并在其中进行“CustomFlag”

的文本搜索

您可以通过右键单击Sql Server Management Studio中的数据库名称并选择Tasks / Generate Scripts来编写整个模式(或仅存储过程)的脚本

答案 1 :(得分:1)

您可以尝试使用sys.sql_modules系统视图来获取引用您感兴趣的列的所有sprocs。视图的字段definition返回定义sproc的SQL文本。

例如,以下查询:

SELECT obj.Name SPName, sm.definition SPText
FROM sys.sql_modules sm
INNER JOIN sys.objects obj ON sm.object_id = obj.OBJECT_ID
WHERE sm.definition LIKE '%' + '[JobTitle] =' + '%' AND TYPE = 'P'

返回尝试在JobTitle数据库中设置字段AdventureWorks2008R2的所有sproc:

SPName                      SPText
--------------------------------------------------------------------------------------
uspSearchCandidateResumes   CREATE PROCEDURE [dbo].[uspSearchCandidateResumes] ...etc