如何在INFORMATION_SCHEMA,sys.objects或其他一些元数据中找到使用RECOMPILE声明哪些SP?
(我正在为我的系统运行状况监控添加一些代码,并希望警告那些在不合理的情况下声明的代码。)
注意:我不是在寻找'WITH RECOMPILE'的常规文本搜索 - 我已经可以这样做了,但它会对文本的任何评论或文字版本给出误报。 < / p>
答案 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
的标记。