sql - 表在存储过程或 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
然后customers
在 afrom
或join
随后使用的过程。
如果您有可以依赖的约定,例如delete
will always bedelete from customers
和 not delete customers
,delete from c from...
那么您当然可以改进匹配以增加您找到的内容的相关性。
Redgate 之类的工具SQLPrompt
在这里非常有用,因为您可以编写所有以 为前缀的程序名称exec
,将其粘贴到 SSMS 中,然后立即在弹出窗口中预览每个程序的整个程序代码。
推荐阅读
- javascript - 如何按属性将对象数组分组到 ARRAYS 数组中?
- javascript - 在 ejs 中为每个帖子创建动态函数
- swiftui - SwiftUI - 如何在@ObservableObject 中获取@EnvironmentObject 数据
- mysql - 从表 B 中删除,其中列值与表 a 类似,带有通配符
- google-apps-script - Google 应用程序脚本导出 CSV 日期格式问题
- ios - 在 iPhone 上输入 Charles Proxy 服务器和端口详细信息后 Safari 无法工作?
- excel - 间歇性下标超出范围错误代码抛出
- c# - 尝试在 C# 中为 COM 互操作实现具有属性的索引器
- javascript - 有没有更好的方法来编写这个脚本?
- javascript - Javascript 字典和添加值