如何在SQL Server(2005)中找到WITH RECOMPILE元数据?

时间:2009-01-12 16:27:33

标签: sql sql-server metadata

如何在INFORMATION_SCHEMA,sys.objects或其他一些元数据中找到使用RECOMPILE声明哪些SP?

(我正在为我的系统运行状况监控添加一些代码,并希望警告那些在不合理的情况下声明的代码。)

注意:我不是在寻找'WITH RECOMPILE'的常规文本搜索 - 我已经可以这样做了,但它会对文本的任何评论或文字版本给出误报。 < / p>

3 个答案:

答案 0 :(得分:1)

我会用一种快速而肮脏的方式:

SELECT
     o.name
FROM
     syscomments c
INNER JOIN sys.objects o ON
     o.object_id = c.id
WHERE
     c.text LIKE '%WITH RECOMPILE%'

虽然在实际应用中使用它可能不是一个好主意。如果我有几分钟,我会尝试挖掘一个更清洁的方式。上面还将捕获具有该字符串注释掉的proc,它使用MS SQL Server特定的表syscomments等。

答案 1 :(得分: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 + '%'

答案 2 :(得分:0)

感谢GSquared上的SQL Server Central Forums,我发现,is_recompiled中有一个名为sys.sql_modules的标记。