如何在 INFORMATION_SCHEMA、sys.objects 或其他元数据中找到哪些 SP 被声明为 WITH RECOMPILE?
(我正在向我的系统健康监控中添加一些代码,并希望对那些以这种方式声明的不合理的代码发出警告。)
注意:我不是在寻找“WITH RECOMPILE”的一般文本搜索 - 我已经可以做到这一点,但它会对文本的任何注释或文字版本给出误报。
如何在 INFORMATION_SCHEMA、sys.objects 或其他元数据中找到哪些 SP 被声明为 WITH RECOMPILE?
(我正在向我的系统健康监控中添加一些代码,并希望对那些以这种方式声明的不合理的代码发出警告。)
注意:我不是在寻找“WITH RECOMPILE”的一般文本搜索 - 我已经可以做到这一点,但它会对文本的任何注释或文字版本给出误报。
对于一种快速而肮脏的方式,我会使用:
SELECT
o.name
FROM
syscomments c
INNER JOIN sys.objects o ON
o.object_id = c.id
WHERE
c.text LIKE '%WITH RECOMPILE%'
不过,这对于在实际应用程序中使用可能不是一个好主意。如果我有几分钟的时间,我会尝试挖掘一种更清洁的方法。上面还将捕获已注释掉该字符串的过程,它使用 MS SQL Server 特定表 syscomments 等。
这是我使用的查询,它将为任何给定的搜索字符串搜索用户定义的视图、存储过程和函数:
DECLARE @strSearch varchar(50)
SELECT @strSearch = 'my search string'
SELECT
so.[Name],
OBJECT_ID(so.[Name])
FROM
[sysobjects] so
JOIN
syscomments sc
ON
sc.[ID] = OBJECT_ID(so.[Name])
WHERE
(so.[xtype] = 'FN' OR so.[xtype] = 'P' OR so.[xtype] = 'V') AND
so.[category] = 0 AND
sc.encrypted = 0 AND
sc.[text] like '%' + @strSearch + '%'
感谢SQL Server Central Forums上的GSquared,我找到了它,有一个名为in的标志。is_recompiled
sys.sql_modules