Sql server 如何将MSSQLServer数据库提取为.dacpac而无需验证提取?
我想用ServerManagementStudio提取MSSQLServer数据库的数据库模式。我使用提取命令“提取数据层应用程序…” 数据库中有对另一个数据库的多个引用。因此,我得到以下错误 提取数据库时出错:数据包的架构模型验证失败。 错误SQL71562:验证元素[dbo].[x]对对象[dbo].[y]的引用未解析时出错。从该平台创建包时不支持外部引用。 问题是,SSMS使用参数为/p:VerifyExtraction=True的SQLPackage.exe。当我使用控制台并在没有此参数的情况下调用SQLPackage.exe时,它默认使用/p:VerifyExtraction=False,我可以创建.dacpac文件Sql server 如何将MSSQLServer数据库提取为.dacpac而无需验证提取?,sql-server,database,ssms,data-tier-applications,Sql Server,Database,Ssms,Data Tier Applications,我想用ServerManagementStudio提取MSSQLServer数据库的数据库模式。我使用提取命令“提取数据层应用程序…” 数据库中有对另一个数据库的多个引用。因此,我得到以下错误 提取数据库时出错:数据包的架构模型验证失败。 错误SQL71562:验证元素[dbo].[x]对对象[dbo].[y]的引用未解析时出错。从该平台创建包时不支持外部引用。 问题是,SSMS使用参数为/p:VerifyExtraction=True的SQLPackage.exe。当我使用控制台并在没有此参数
有没有办法将SSMS配置为禁用验证?我也找不到在SSMS(2008 R2或2012)中有效的方法,但Visual Studio(2013)和SSDT似乎有效:在VS中,转到SQL Server对象资源管理器,连接到有问题的服务器,右键单击有问题的数据库,提取数据层应用程序,然后调整提取设置,其中之一是“验证提取”。我不知道MS为什么不把它构建到SSMS中
不过,我注意到,在执行此操作时有一点奇怪,那就是VS只能通过此方法提取.DacPac。即使选择向提取添加数据,扩展名仍然是.DacPac。我的印象是.dacpac仅用于模式,而.bacpac用于模式+数据。无论如何,在VS创建.DacPac(模式+数据)文件后,SSMS能够使用“部署数据层应用程序…”向导将其导入 如果无法使用Visual Studio,则可以使用命令行
SqlPackage
应用程序从数据库中提取架构。默认情况下,不会验证模式(不,我不知道为什么SSMS和命令行产品有不同的默认设置!)SqlPackage.exe
可以在C:\ProgramFiles(x86)\Microsoft SQL Server\\DAC\bin
中找到
例如,以下内容从本地SQL Server实例提取MyDatabase
的架构,并将其输出到本地文件系统上的.dacpac
文件:
sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"
如果希望在以后的阶段包括模式验证,可以通过向命令行添加/p:VerifyExtraction=True
来显式设置标志
有关SqlPackage.exe
的完整信息可在此处找到:
我花了几个小时的时间来追踪那些不起作用的powershell脚本、不一致的程序集和版本(我承认缺乏使用powershell的经验),这一切立即奏效。@Nick.McDermaid谢谢你的评论,我真的很高兴听到它的帮助。SSMS 17.5的位置似乎是
C:\Program Files(x86)\Microsoft SQL Server\140\DAC\bin\SqlPackage.exe
@yvesva谢谢!是的,不同版本的SQL Server及其工具存储在不同的编号目录下,对应于SQL Server 2017的140
。在我的回答中,我没有硬编码其中一个,而是将
改为。@CB\u Ron根据sqlpackage发行说明,去年增加了对MI的支持:PowerShell和命令行的行为应该相同。