使用最新版本的 SSDT SqlPackage.exe 部署 SQL 服务器 dacpac 会删除列默认值

Deploying SQL Server dacpac with newest version of SSDT SqlPackage.exe drops column defaults

我们使用 Visual Studio 数据库项目和 SSDT 来控制和部署我们的 SQL 服务器架构。我们将项目编译为 dacpac 文件,然后根据需要使用 SqlPackage.exe 针对 SQL Server (2008 R2) 实例发布该 dacpac。

我们最近从 VS 2013 升级到 VS 2015。有一段时间我们仍在使用旧 SqlPackage.exe(来自 VS 2013 SSDT)的副本来部署我们的 dacpac。然而,我们刚刚开始了一些新员工,并发现在他们的机器上,部署带有旧 SqlPackage.exe 的 dacpac 失败了。 (从未安装过 VS 2013,并且缺少 DLL。)我用新的 SqlPackage.exe(和相关文件)替换了旧的 SqlPackage.exe(和相关文件)。 dacpac 现在部署成功。

问题: 使用新版本 SqlPackage.exe 部署 dacpac 不会部署列默认值(例如 NEWSEQUENTIALID())。这显然是不可接受的,但恢复到 SqlPackage.exe 的旧版本会破坏我们一些开发人员的部署。这是 SSDT 的错误还是我不知道的重大更改?是否有一些配置可能设置不正确?

我建议在“开发者工具(SSDT、BIDS 等)”下创建一个 Microsoft Connect issue

至于如何让旧版本的 SqlPackage.exe 正常工作,请注意 Visual Studio 2013 附带了依赖于 SQL Server 2012 依赖项的 SqlPackage.exe 版本.另一方面,Visual Studio 2015 附带了一个依赖于 SQL Server 2014 依赖项的 SqlPackage.exe 版本。我假设您所指的 'the old version of SqlPackage.exe' 的版本号以 11 开头。如果这是正确的,您的 VS2015-only 开发人员将需要为较旧的 SqlPackage.exe:[=12= 安装这些依赖项]

SqlDom.msi

SQLSysClrTypes.msi

它们在 http://www.microsoft.com/en-us/download/details.aspx?id=39301

有售

这似乎已修复。我通过添加 table:

使用来自 https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild/ 10.0.60809 的 sqlpackage.exe 版本 13.0.3336.1 进行了测试
CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID());

然后用 /Action:Extract 生成一个 .dacpac 文件,然后删除 table,然后用 /Action:Script 生成一个 SQL 脚本。该脚本部分包含:

CREATE TABLE [dbo].[myTable] (
    [ColumnA] UNIQUEIDENTIFIER NULL
);

ALTER TABLE [dbo].[myTable]
    ADD DEFAULT (newsequentialid()) FOR [ColumnA];