gpt4 book ai didi

sql-server - 如何查找所有插入、更新或删除记录的存储过程?

转载 作者:行者123 更新时间:2023-12-02 23:29:43 25 4
gpt4 key购买 nike

是否可以在不解析源的情况下选择插入、更新或删除记录的所有存储过程名称的列表?我需要创建一个 TSQL 实用程序脚本来执行此操作。效率不是问题,因为它一年只运行几次(我的意思是游标没问题)。理想情况下,此脚本不包括对临时或局部变量表的更新。

我尝试了在 SO Question 上找到的以下查询.

SELECT 
so.name,
so2.name,
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and
is_updated = 1 -- proc updates table, or at least, I think that's what this means

但它会产生漏报。

最佳答案

调用sp_refreshsqlmodule在所有非架构绑定(bind)存储过程上:

DECLARE @template AS varchar(max)
SET @template = 'PRINT ''{OBJECT_NAME}''
EXEC sp_refreshsqlmodule ''{OBJECT_NAME}''

'

DECLARE @sql AS varchar(max)

SELECT @sql = ISNULL(@sql, '') + REPLACE(@template, '{OBJECT_NAME}',
QUOTENAME(ROUTINE_SCHEMA) + '.'
+ QUOTENAME(ROUTINE_NAME))
FROM INFORMATION_SCHEMA.ROUTINES
WHERE OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
+ QUOTENAME(ROUTINE_NAME)),
N'IsSchemaBound') IS NULL
OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
+ QUOTENAME(ROUTINE_NAME)),
N'IsSchemaBound') = 0

EXEC (
@sql
)

关于sql-server - 如何查找所有插入、更新或删除记录的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1850045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com