Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将MSSQLServer数据库提取为.dacpac而无需验证提取?_Sql Server_Database_Ssms_Data Tier Applications - Fatal编程技术网

Sql server 如何将MSSQLServer数据库提取为.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。当我使用控制台并在没有此参数

我想用ServerManagementStudio提取MSSQLServer数据库的数据库模式。我使用提取命令“提取数据层应用程序…”

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

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

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


有没有办法将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和命令行的行为应该相同。