2

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

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

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

4

2 回答 2

3

我建议在“开发人员工具(SSDT、BIDS 等)”下创建一个Microsoft Connect 问题

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

SqlDomsi

SQLSysClrTypes.msi

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

于 2015-08-26T21:07:49.760 回答
1

这似乎是固定的。我通过添加表使用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());

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

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

ALTER TABLE [dbo].[myTable]
    ADD DEFAULT (newsequentialid()) FOR [ColumnA];
于 2016-10-13T21:06:22.357 回答