簡體   English   中英

僅在滿足條件時執行許多腳本,而不通過 GO 語句中斷 IF

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM