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