Я хочу, чтобы все хранимые процедуры все еще синтаксически верны. (Это может произойти, если кто-то переименовывает/удаляет таблицу/столбец).
В настоящее время мое решение проверить синтаксис всех хранимых процедур - перейти в Enterprise Manager, выбрать первую хранимую процедуру в списке и использовать следующую процедуру:
- Enter
- Alt + C
- Побег
- Побег
- Стрелка вниз
- Перейти к 1
Это работает, но это довольно утомительно. я бы хотел, чтобы хранимая процедура называлась
SyntaxCheckAllStoredProcedures
как и другая хранимая процедура, которую я написал, делает то же самое для представлений:
RefreshAllViews
Для всех преимуществ RefreshAllViews:
RefreshAllViews.prc
CREATE PROCEDURE dbo.RefreshAllViews AS
-- This sp will refresh all views in the catalog.
-- It enumerates all views, and runs sp_refreshview for each of them
DECLARE abc CURSOR FOR
SELECT TABLE_NAME AS ViewName
FROM INFORMATION_SCHEMA.VIEWS
OPEN abc
DECLARE @ViewName varchar(128)
-- Build select string
DECLARE @SQLString nvarchar(2048)
FETCH NEXT FROM abc
INTO @ViewName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLString = 'EXECUTE sp_RefreshView '[email protected]
PRINT @SQLString
EXECUTE sp_ExecuteSQL @SQLString
FETCH NEXT FROM abc
INTO @ViewName
END
CLOSE abc
DEALLOCATE abc
Для всех преимуществ хранимая процедура для отметки всей хранимой процедуры, так как требуется перекомпиляция (маркировка хранимой процедуры для перекомпиляции не укажет, синтаксически ли она действительна):
RecompileAllStoredProcedures.prc
CREATE PROCEDURE dbo.RecompileAllStoredProcedures AS
DECLARE abc CURSOR FOR
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
OPEN abc
DECLARE @RoutineName varchar(128)
-- Build select string once
DECLARE @SQLString nvarchar(2048)
FETCH NEXT FROM abc
INTO @RoutineName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLString = 'EXECUTE sp_recompile '[email protected]
PRINT @SQLString
EXECUTE sp_ExecuteSQL @SQLString
FETCH NEXT FROM abc
INTO @RoutineName
END
CLOSE abc
DEALLOCATE abc
Для полноты использования процедура UpdateAllStatistics. Это позволит обновить всю статистику в базе данных, выполнив полное сканирование данных:
RefreshAllStatistics.prc
CREATE PROCEDURE dbo.RefreshAllStatistics AS
EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'