如何针对 localdb 对使用 sql 服务器企业功能的 SSDT 项目进行单元测试?

How do I unit test a SSDT project which uses sql server enterprise features against localdb?

我在 VS 中设置了一个 SSDT 项目,它使用 SQL Server Enterprise Edition 功能(例如数据压缩)。

我希望能够将此项目部署到 localdb,以便能够在部署到 CI 数据库之前对本地数据库进行 运行 单元测试。但是,localdbSQL Server Express Edition 的一个实例,不支持数据压缩。

我尝试部署时遇到的错误是:

SQL72014 .Net SqlClient Data Provider: Cannot enable compression for object 'FooTable'. Only SQL Server Enterprise Edition supports compression.

可能的解决方案 #1:将所有数据压缩 SQL 转移到 Post Deploy Script,部署到 localdb 时不是 运行。这并不理想,因为该选项将隐藏在源代码管理中,并且不会显示在模式比较等中。

可能的解决方案 #2:将问题 SQL 替换为 SQLCMD Variable 例如$(WithPageCompression) 部署到 localdb 时为空值,部署到真实数据库时为 WITH (DATA_COMPRESSION = PAGE) 。这是对上述内容的改进,但随着在 WITH.

中设置更多选项,它将变得越来越笨拙

可能的解决方案 #3:在每台开发人员机器上安装 SQL 服务器的本地实例。看起来 Developer Edition 可以完成这项工作(现在是免费的)。看起来这可能是最好的解决方案并且会带来其他好处,但是在组织的基础设施上安装、配置和维护它的开销让它变得很痛苦。

我还有哪些其他选择?

谢谢

您不想针对 SQL Server Express 测试任何 'serious'。我没有时间搞事情 war 但 Express 是免费的(请参阅;一分钱一分货......')您想以某种方式测试 SQL 与您的生产版本完全匹配的服务器,否则您将花费​​大量时间来发现和修复不兼容性。 hardware 不一定必须匹配,但您应该尽可能在测试和生产之间匹配 software。

为什么安装了Express的开发版不能安装?

随着 release of SQL Server 2016 SP1,大多数功能现在在所有版本中都可用。由于其设计,LocalDB 存在一些限制(它比普通的 Express 版本更轻巧,因此不支持 FileGroups / FileStream),但值得一试。

您可以下载 Express 或 LocalDB from here. LocalDB is also available in the SSDT 17.0 RC release。目前处于发布候选模式,因此我们不建议将其用于生产场景。