我想用Server Management Studio提取MSSQLServer数据库的数据库模式.我使用Extract命令"Extract Data-tier Application .."
在数据库中有几个对另一个数据库的引用.因此,我得到以下错误.
提取数据库时出错:验证数据包的模式模型失败.错误SQL71562:验证元素[dbo]时出错.[x]有一个未解析的对象[dbo]的引用.[y].从此平台创建包时不支持外部引用.
问题是,SSMS使用带参数/ p的SQLPackage.exe :VerifyExtraction = True.当我使用控制台并在没有此参数的情况下调用SQLPackage.exe时,它默认使用/ p:VerifyExtraction = False,我可以创建.dacpac文件.
有没有办法配置SSMS以禁用验证?
如果无法使用Visual Studio,则可以使用命令行SqlPackage
应用程序从数据库中提取架构.默认情况下,这不验证架构(不,我不知道为什么SSMS和命令行提供有不同的默认值!).SqlPackage.exe
可以找到C:\Program Files (x86)\Microsoft SQL Server\<SQL_VERSION>\DAC\bin
.
例如,以下内容MyDatabase
从本地SQL Server实例中提取架构,并将其输出到.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
我无法找到适用于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 ..."向导将其导入.