Как найти метаданные с RECOMPILE в SQL Server (2005)? - PullRequest
4 голосов
/ 12 января 2009

Как узнать, какие SP объявлены с RECOMPILE, либо в INFORMATION_SCHEMA, sys.objects или в некоторых других метаданных?

(Я добавляю некоторый код в мониторинг состояния моей системы и хочу предупредить о тех, которые объявлены таким образом, где это неоправданно.)

Примечание. Я не ищу общий текстовый поиск по запросу «С РЕКОМЕНДУЕТСЯ» - я уже могу это сделать, но он даст ложное срабатывание для любых закомментированных или буквальных версий текста.

Ответы [ 3 ]

1 голос
/ 12 января 2009

Вот запрос, который я использую для поиска пользовательских представлений, хранимых процедур и функций для любой заданной строки поиска:

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 + '%'
1 голос
/ 12 января 2009

Для быстрого и грязного способа я бы использовал:

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 и т. Д.

0 голосов
/ 12 января 2009

Благодаря GSquared на Центральные форумы по SQL Server , я нашел это, есть флаг с именем is_recompiled в sys.sql_modules.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...