首页 > 解决方案 > 表在存储过程或 SQL 函数中执行的 DML 操作

问题描述

我正在使用 SQL Server 2014。我有一些用户定义的表,如 Customer、PurchaseOrder、User 等。我在许多存储过程中使用这些表。在某些情况下,这些存储过程几乎有 1000/1500 行长。

现在我想找出这些表在每个存储过程中执行的操作(插入/更新/删除)。

我是手动做的。但这是地狱般的努力。此外,在手动操作中,我可能会错过任何东西。

我们是否可以编写一个 SQL 查询,通过该查询无需打开存储过程,我就可以知道某个表在其中执行什么操作(插入/更新/删除)。

提前致谢。

标签: sqlsql-serverstored-proceduressql-functionsystem-stored-procedures

解决方案


根据您的要求,您可能会发现以下内容很有用。您可以搜索所有///等的全文procedures并查找匹配的关键字functionstriggersviews

select Schema_Name(o.schema_id)[schema], o.[name], o.type_desc
from sys.sql_modules m
join sys.objects o on o.object_id=m.object_id
where 
    m.definition like '%insert%customers%' or
    m.definition like '%update%customers%' or
    m.definition like '%delete%customers%' 
order by type_desc, name

这可以帮助您缩小范围并识别潜在对象。这本身并不精确,因为它可能会找到一个您更新orders然后customers在 afromjoin随后使用的过程。

如果您有可以依赖的约定,例如deletewill always bedelete from customers和 not delete customersdelete from c from...那么您当然可以改进匹配以增加您找到的内容的相关性。

Redgate 之类的工具SQLPrompt在这里非常有用,因为您可以编写所有以 为前缀的程序名称exec ,将其粘贴到 SSMS 中,然后立即在弹出窗口中预览每个程序的整个程序代码。


推荐阅读