4

如何在 INFORMATION_SCHEMA、sys.objects 或其他元数据中找到哪些 SP 被声明为 WITH RECOMPILE?

(我正在向我的系统健康监控中添加一些代码,并希望对那些以这种方式声明的不合理的代码发出警告。)

注意:我不是在寻找“WITH RECOMPILE”的一般文本搜索 - 我已经可以做到这一点,但它会对文本的任何注释或文字版本给出误报。

4

3 回答 3

1

对于一种快速而肮脏的方式,我会使用:

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 等。

于 2009-01-12T16:39:11.160 回答
1

这是我使用的查询,它将为任何给定的搜索字符串搜索用户定义的视图、存储过程和函数:

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 + '%'
于 2009-01-12T16:44:21.307 回答
0

感谢SQL Server Central Forums上的GSquared,我找到了它,有一个名为in的标志。is_recompiledsys.sql_modules

于 2009-01-12T20:19:54.040 回答