Я хочу, чтобы все хранимые процедуры все еще синтаксически действовали. (Это может произойти, если кто-то переименовывает/удаляет таблицу/столбец).Синтаксис проверяет все хранимые процедуры?
Сейчас мое решение, чтобы проверить синтаксис всех хранимых процедур, чтобы войти в Enterprise Manager, выберите первую хранимую процедуру в списке, и использовать процедуру:
- Введите
- Alt + C
- побег
- побег
- Стрелка вниз
- Goto 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'
Посмотрите ваши пометки. Это был единственный вопрос на сайте с меткой «sqlserver». Вместо этого используйте 'sql-server'. –