我在我的T-SQL代码库中使用DBDeploy.NET进行变更控制管理。 DBDeploy由开发人员负责维护一组编号的更改脚本。当触发部署(通过NAnt)时,DBDeploy会查看更改日志表并确定需要执行哪些修补程序才能使实例更新。
我遇到的问题是设置创建索引视图所需的必要设置。 QUOTED_IDENTIFIER,ANSI_NULLS和ARITHABORT都需要打开。是的,我可以轻松地将这些SET语句放在创建/更改索引视图的更改脚本的顶部。但这些设置是连接级别。如果以后我从头开始构建一个新实例怎么办?当我在新实例上运行DBDeploy时,这些设置将渗透到所有后续更改脚本,因为所有更改脚本都有效地连接到要在单个连接上执行的最终SQL脚本。更糟糕的是像QUOTED_IDENTIFIER这样的分析时选项,它也会先应用于所有更改脚本。所以:
替代方案很糟糕:
那么可以做些什么,我该怎么办?
答案 0 :(得分:0)
不幸的是,我不相信有一种方法可以在您的连接中获取当前的SET状态。
我不使用DBDeploy.NET,但这听起来明显像是工具的限制。 DBDeploy.NET应在项目元数据中定义(如在Visual Studio DB项目中)SET谓词默认应该为随后部署的任何数据库定义的内容。
为了避免脚本之间“流血”,它应该在每个脚本连接到最终脚本之前使用这些项目级默认值自动添加SET语句。
拥有这种确定性方法意味着开发人员可以清楚这些SET在脚本执行时将处于什么状态。否则,脚本将受SQL客户端连接或服务器实例中存在的各种默认值的影响。