我想確保所有存儲過程仍然在語法上有效。 (如果有人重命名/刪除表/列,可能會發生這種情況。語法檢查所有存儲過程?
現在我的解決方案,以檢查所有存儲過程的語法是進入企業管理器,在列表中選擇第一個存儲過程,並使用過程:
- 輸入
- 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'
請留意您的標籤。這是標籤爲「sqlserver」的網站上的唯一問題。改用'sql-server'。 – 2009-07-24 13:29:57