如何在没有VerifyExtraction的情况下将MSSQLServer数据库提取为.dacpac?

时间:2014-11-05 13:33:27

标签: sql-server database ssms data-tier-applications

我想使用Server Management Studio提取MSSQLServer数据库的数据库模式。我使用Extract命令“Extract Data-tier Application ..”

在数据库中有几个对另一个数据库的引用。因此,我收到以下错误。

提取数据库时出错:验证数据包的架构模型失败。 错误SQL71562:验证元素[dbo]时出错。[x]有一个未解析的对象[dbo]的引用。[y]。从此平台创建包时不支持外部引用。

问题是,SSMS使用带参数 / p:VerifyExtraction = True 的SQLPackage.exe。当我使用控制台并在没有此参数的情况下调用SQLPackage.exe时,它默认使用 / p:VerifyExtraction = False ,我可以创建.dacpac文件。

有没有办法配置SSMS以禁用验证?

2 个答案:

答案 0 :(得分:42)

我也无法找到适用于SSMS(2008 R2或2012)的方法,但是带有SSDT的Visual Studio(2013)似乎可行:在VS中,转到SQL Server对象资源管理器,连接到有问题的服务器,右键单击有问题的数据库,提取数据层应用程序,然后调整提取设置,其中一个是"验证提取"。我不知道为什么MS不能将其构建到SSMS中。

我注意到有一件奇怪的事情,但是,VS只会通过这种方法提取.DacPac。即使您选择将数据添加到数据提取中,扩展名仍然是.DacPac。我的印象是.DacPacs仅用于Schema Only,而.BacPacs用于Schema + Data。无论如何,在VS创建了.DacPac(Schema + Data)文件后,SSMS能够使用" Deploy Data-tier Application ..."向导。

答案 1 :(得分:20)

如果无法使用Visual Studio,则可以使用命令行SqlPackage应用程序从数据库中提取架构。默认情况下,此验证架构(不,我不知道为什么SSMS和命令行提供有不同的默认值!)。 SqlPackage.exe可以找到C:\Program Files (x86)\Microsoft SQL Server\<SQL_VERSION>\DAC\bin

例如,以下内容从本地SQL Server实例中提取MyDatabase的架构,并将其输出到本地文件系统上的.dacpac文件中:

sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"

如果要在稍后阶段包含架构验证,可以通过将/p:VerifyExtraction=True添加到命令行来明确设置标志。

有关SqlPackage.exe的完整信息,请访问:

https://msdn.microsoft.com/library/hh550080.aspx