我想使用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以禁用验证?
答案 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
的完整信息,请访问: