表在存储过程或 SQL 函数中执行的 DML 操作

问题描述

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

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

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

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

提前致谢。

解决方法

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

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 然后在 customersfrom 中使用 join 的过程。

如果您有可以依赖的约定,例如 delete 将始终为 delete from customers 而不是 delete customersdelete from c from...,那么您当然可以改进匹配以增加您发现的内容的相关性。

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