问题描述
我使用的是 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
然后在 customers
或 from
中使用 join
的过程。
如果您有可以依赖的约定,例如 delete
将始终为 delete from customers
而不是 delete customers
或 delete from c from...
,那么您当然可以改进匹配以增加您发现的内容的相关性。
Redgate 的 SQLPrompt
等工具在这里非常有用,因为您可以编写以 exec
为前缀的所有过程名称,将其粘贴到 SSMS 中,并立即在弹出窗口中预览每个过程的整个过程代码 -向上窗口。