5

在将数据库项目转换为 SSDT 并升级到 SQL Server 2012 时,我需要部署脚本才能同时用于 SQL Server 2008 和 2012。

sqlpackage.exe /Action:Publish用来部署最新的数据库位。

在 sqlproj 项目属性中,我确实看到了一个带有选项 2005/2008/2012 sql server的目标平台下拉列表。如果我更改此目标平台,它会生成不同的 dacpac 吗?每个sql server版本需要带两个版本的dacpac吗?

或者相同的 dacpac 是否适用于任何版本的 sql server?

4

3 回答 3

9

我知道这已经 11 个月大了,但是当您专门针对这种情况进行部署时,有一个选项 - AllowIncompatiblePlatform。

//Set Deployment Options
DacDeployOptions dacOptions = new DacDeployOptions();
dacOptions.AllowIncompatiblePlatform = true;

如果不设置该选项,我可以将 2008 dac 部署到 sql2012,但如果我将 2012 dac 部署到 sql2008 会出错:

Microsoft.Data.Tools.Schema.Sql.Deployment.DeploymentCompatibilityException: 
A project which specifies SQL Server 2012 as the target platform cannot be published to SQL Server 2008.

设置该选项意味着我不会收到此错误并且可以部署到以前的版本(我相信回到 2005 年)。注意您可能还需要将选项 TreatVerificationErrorsAsWarnings 设置为 true - YMMV。

于 2013-05-03T12:08:09.603 回答
4

简短的回答是肯定的 - 不同的 DACPAC 用于不同的 SQL Server 版本。Bob Beuachemin 写了一篇关于 DAC Fx3.0 与 DAC 2.0的有用博文

于 2012-05-23T23:30:35.100 回答
3

从命令行使用SqlPackage.exe,使用p:AllowIncompatiblePlatform选项。仍然会显示警告,但会继续。这适用于从 SQL Server 2012 dacpac 到 SQL Sever 2008 R2。

SqlPackage.exe /Action:Publish 
   /SourceFile:"testdb.dacpac" 
   /TargetDatabaseName:testDb 
   /p:AllowIncompatiblePlatform=true
   /TargetServerName:"testserver"
于 2015-10-31T17:50:16.157 回答