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

Tim*_*ord 5 t-sql sql-server

是否可以在不解析源的情况下选择插入,更新或删除记录的所有sproc名称列表?我需要创建一个TSQL实用程序脚本来执行此操作.效率不是问题,因为它每年只运行几次(诅咒者我的意思是光标是可以的).理想情况下,此脚本不包含对temp或local变量表的更新.

我尝试了在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 
Run Code Online (Sandbox Code Playgroud)

但它产生假阴性.

Cad*_*oux 6

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

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
            )
Run Code Online (Sandbox Code Playgroud)