Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查数据库中的任何存储过程是否修改了某个列_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql server 检查数据库中的任何存储过程是否修改了某个列

Sql server 检查数据库中的任何存储过程是否修改了某个列,sql-server,sql-server-2008,stored-procedures,Sql Server,Sql Server 2008,Stored Procedures,有没有一种方法可以编写一个查询,向我显示数据库中修改某一列的任何存储过程的名称?这个工作中的数据库有1300多个存储过程列在系统存储过程下,还有两个未列在系统存储过程下。我需要知道哪一个修改了列“CustomFlag 1” 出于某种原因,每6个月就会为每个条目清除一次此列,因此我的假设是,有一个存储过程正在执行此操作,并且希望找出哪一个,以便我们可以修复它 这是在SQL Server 2008上使用的SSMS 2008。生成数据库架构的脚本,并在其中进行文本搜索以查找“CustomFlag” 通

有没有一种方法可以编写一个查询,向我显示数据库中修改某一列的任何存储过程的名称?这个工作中的数据库有1300多个存储过程列在系统存储过程下,还有两个未列在系统存储过程下。我需要知道哪一个修改了列“CustomFlag 1”

出于某种原因,每6个月就会为每个条目清除一次此列,因此我的假设是,有一个存储过程正在执行此操作,并且希望找出哪一个,以便我们可以修复它


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

生成数据库架构的脚本,并在其中进行文本搜索以查找“CustomFlag”

通过右键单击Sql Server Management Studio中的数据库名称并选择Tasks/Generate Scripts,您可以编写整个架构(或仅存储的过程)的脚本。您可以尝试使用系统视图获取引用您感兴趣的列的所有存储过程。视图的字段
definition
返回定义存储过程的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'
返回试图在
AdventureWorks2008R2
数据库中设置字段
JobTitle
的所有存储过程:

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

我能想到的一种快速而肮脏的方法是创建一个包含所有存储过程的脚本,然后将该脚本加载到文本编辑器中,然后使用列名执行CTRL+F。无论我在家如何,它似乎都能工作,因此在我到达那里时将对其进行测试。谢谢你的回复。我从这篇文章中了解到,我很可能会在未来使用它,这似乎会奏效。再一次,我在家,所以当我到达那里时,我会在工作中进行测试。我在我自己的个人SQL数据库上做了一个快速测试,里面几乎没有任何东西,我认为这会很好。在工作时在数据库上做了这个测试,在生成脚本时,它得到了几千个,其中一个在状态列“无弹出框”或其他任何东西下抛出了一个错误,之后的一切都没有运行。告诉它只编写存储过程的脚本。我尝试了,但在第一个存储过程中出现了错误。可能是访问问题我的DBA限制了我的访问权限。我甚至不能创建临时表。你必须让DBA为你回答这个问题。