[英]Execute many scripts only if condition is met, without breaking IF through GO-statement
在我的 SSDT 項目(Visual Studio 數據庫項目)中,我有很多腳本,只有在滿足條件時才必須執行。
條件是服務器名稱 ( @@servername != 'LiveServer'
)。
腳本將執行各種操作,例如創建表/存儲過程/作業、從其他地方獲取數據等。
由於要執行的事情很多,因此這些腳本中有很多GO
語句。
問題:
由於有許多GO
-statements,我如何讓條件工作? 當這樣做時,我猜這些PostDeployMasterScripts
中的GO
語句會破壞IF
語句?
IF (@@SERVERNAME != 'LiveServer')
print CONVERT(varchar, sysdatetime(), 8) + ' executing linked scripts'
:r .\PostDeployMasterScripts\Linked\CreateTemporaryTables.sql
:r .\PostDeployMasterScripts\Linked\CreateProcedures.sql
:r .\PostDeployMasterScripts\Linked\FetchInitialData.sql
:r .\PostDeployMasterScripts\Linked\CreateJobs.sql
print CONVERT(varchar, sysdatetime(), 8) + ' linked postdeploy finished'
GO
我正在考慮在我的解決方案中將所有這些 postdeploy-scripts 移動到一個單獨的項目中,但我不確定這是否能解決問題,即使當我找到一種僅在給定條件下執行腳本的方法時也是如此。
所需的解決方案: (tl; dr)
實現給定條件並執行我的腳本而不破壞IF
語句的最佳方法是什么? (部署后,附加項目,...?)
讓您的IF
檢查一小批,然后將PARSEONLY
設置為ON
。
每個后續批次都不會被執行,直到它遇到另一個SET PARSEONLY
語句(是的,文檔實際上並沒有提到SET
語句不受PARSEONLY
的“不編譯和執行”-ness 的約束)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.