С помощью следующего сценария я попытался перекомпилировать все наши хранимые процедуры в базе данных, потому что мы обновляемся до SQL Server 2012 (с 2005 года), и я хочу заранее убедиться, что они не сломать.SQL Server перекомпилировал отмеченные хранимые процедуры
DECLARE @schema VARCHAR(20),
@spName VARCHAR(MAX),
@fullName VARCHAR(MAX)
DECLARE storedProcedureCursor CURSOR FOR
SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME
FROM ASZ_GWZ.information_schema.routines
WHERE routine_type = 'PROCEDURE'
OPEN storedProcedureCursor
FETCH NEXT FROM storedProcedureCursor INTO @schema, @spName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fullName = @schema + '.' + @spName
EXEC sp_recompile @objname = @fullName
FETCH NEXT FROM storedProcedureCursor INTO @schema, @spName
END
CLOSE storedProcedureCursor
DEALLOCATE storedProcedureCursor
К сожалению, результат был немного отличается от того, что я ожидал, так как хранимые процедуры были только отмечены перекомпиляции и фактически не получают перекомпилировать.
Объект 'dbo.xyz' был успешно помечен для повторной компиляции.
Как я могу перекомпилировать все (или все теперь для перекомпиляции отмеченные) хранимые процедуры?
Заранее спасибо
Это то, что процедура sp_recompile делает. Вот страница документации. https://msdn.microsoft.com/en-us/library/ms181647.aspx Вот самое первое предложение ... «Вызывает повторную компиляцию хранимых процедур, триггеров и пользовательских функций при следующем запуске «. –
Поскольку вы обновляетесь с 2005 по 2012 год, это упражнение бессмысленно. Планы выполнения должны будут кэшироваться в 2012 году, поэтому все будет перекомпилировано в любом случае. Спасите себя от хлопот. Сделайте свое обновление. Обновлять статистику, восстанавливать индексы и т. Д. Кэш плана выполнения будет сначала немного вялым, но он «кэшируется» довольно быстро. –