Как найти хранимые процедуры с неверным текстом в syscomments - PullRequest
2 голосов
/ 29 июля 2010

Похоже, что есть несколько хранимых процедур, которые были переименованы в sp_rename, в результате чего системные комментарии остаются со старым именем процесса вместо нового имени процесса.

Таким образом, мои переводы в БД не могут быть правильно переданы.

Есть ли способ найти, какие прокы (или любые объекты) имеют свои имена не синхронизированы?

Или, что лучше, простой способ найти и исправить их?

1 Ответ

3 голосов
/ 29 июля 2010

Вы можете попробовать

select object_name(id)
from syscomments 
WHERE COLID=1 AND
OBJECTPROPERTY(id, 'isprocedure')=1 and
REPLACE(REPLACE(TEXT,CHAR(13),' '),CHAR(10),' ') 
          NOT LIKE '%CREATE%PROC%'+ object_name(id) + ' %'
AND
(REPLACE(REPLACE(TEXT,CHAR(13),' '),CHAR(10),' ')
          NOT LIKE '%CREATE%PROC%'+ object_name(id) + ']%')

SYS.SQL_MODULES, вероятно, будет немного более устойчивым, если есть риск, что вы получите комментарий длиной около 4000 символов перед битом CREATE PROC.

Более надежное решение, чем сам синтаксический анализ текста, - создать сценарий для повторной компиляции всех хранимых процедур. Если вы запустите ниже ...

SELECT 'EXEC sp_refreshsqlmodule ''' + 
            quotename(schema_name(schema_id)) + '.' + 
            quotename(object_name(object_id)) + '''' 
FROM sys.procedures

... затем скопируйте и вставьте результаты в окно запросов в среде управления студии и выполните результирующий сценарий, он выдаст ошибку для тех, где имена не синхронизированы.

Это приведет к перекомпиляции всех планов хранимых процедур, поэтому не делайте этого на рабочем сервере, если это проблема.

Отредактировано для предоставления дополнительной информации об ошибке.

Код в ответе выше не должен использоваться, если есть вероятность, что sp_rename был использован для замены определения двух объектов. sp_refreshsqlmodule очевидно, есть ошибка в этой ситуации!

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