Sql-Server

如何檢查 Alter view/stored proc 腳本是否已成功執行

  • March 3, 2015

對於數據庫部署,我在批處理文件中呼叫所有 db 架構更改並在目標數據庫上執行它們。

有時我們有用於更改視圖或儲存過程的腳本。我想知道控制視圖/ sp 是否已成功更改並通過輸出日誌文件中的消息報告它的最佳方法是什麼。

例如下面是我想要實現的虛擬碼:

IF 
(
ALTER VIEW vw_abc
.
.
.
.
) Failed THEN 

PRINT 'ALTER view vw_abc Failed'.
ELSE
PRINT 'ALTER view vw_abc Completed Successfully'
END

輸出消息將記錄在腳本日誌文件中,該腳本日誌文件由執行腳本的批處理文件生成。

如果我們可以檢查任何錯誤程式碼來做到這一點?任何想法?

謝謝。

檢查sys.objects具有正確值的行,name並查看該modify_date列是否比腳本啟動時新。

SELECT SYSDATETIME() AS ScriptStart
INTO #scriptstart;
GO
ALTER VIEW ...
GO
ALTER PROC ...
GO
SELECT name
FROM sys.objects
WHERE modify_date > (SELECT ScriptStart FROM #scriptstart);

這將列出自腳本啟動以來已更改的所有對象。如果您足夠關心,您可以加入sys.schemas… :)

使用:on error exit和/或-b。這將導致sqlcmd在第一批命中和錯誤後退出,並設置%ERRORLEVEL%

-b

指定 sqlcmd 在發生錯誤時退出並返回 DOS ERRORLEVEL 值。當 SQL Server 錯誤消息的嚴重級別大於 10 時,返回給 DOS ERRORLEVEL 變數的值為 1;否則返回值為 0。如果除了 -b 之外還設置了 -V 選項,如果嚴重級別低於使用 -V 設置的值,則 sqlcmd 不會報告錯誤。命令提示符批處理文件可以測試 ERRORLEVEL 的值並適當地處理錯誤。sqlcmd 不報告嚴重級別為 10 的錯誤(資訊性消息)。

如果 sqlcmd 腳本包含不正確的註釋、語法錯誤或缺少腳本變數,則返回的 ERRORLEVEL 為 1。

然後,您可以通過檢查%%ERRORLEVEL%%. 在 .sql 文件中,您只需執行ALTER VIEW.

引用自:https://dba.stackexchange.com/questions/94232