すべてのストアド プロシージャが依然として構文的に有効であることを確認したいと考えています。(これは、誰かがテーブル/列の名前を変更/削除した場合に発生する可能性があります)。
現在、すべてのストアド プロシージャの構文をチェックする私の解決策は、Enterprise Manager に移動し、リストの最初のストアド プロシージャを選択して、次の手順を使用することです。
- 入る
- 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 '+@ViewName
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 '+@RoutineName
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'