SqlPackage.exe提取数据和架构验证

时间:2018-04-17 13:21:06

标签: sql-server sql-server-data-tools

安装了Sql Server数据工具后,我尝试使用SqlPackage.exe来自:C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ DAC \ bin \

我想"提取"架构和数据。这样我就可以迁移到没有任何现有数据库的新服务器 - 我希望架构和数据包含在该迁移中。这只是一个旋转/一次性环境。

现有数据库并不是很好,因为它们具有跨数据库引用。我想导出的数据库有多个对另一个名为" audit"的数据库的引用。涉及触发器 - 希望你能得到图片。

阅读完文档后,我尝试了这个命令:

.\sqlpackage.exe /Action:Export /SourceDatabaseName:"MyDb" /SourceServerName:foo\bar /TargetFile:"C:\temp\mydb.bacpac"

然而,这导致了以下许多错误:

Error SQL71562: Error validating element [dbo].[foo_u]: Trigge
r: [dbo].[foo_u] has an unresolved reference to object [Audit].[dbo].[Foo].[FooId]. External references are not supported when creating a package from this platform.

我尝试指定/p:VerifyExtraction=false,但结果是:

.\sqlpackage : *** 'VerifyExtraction' is not a valid argument for the 'Export' action.

所以现在我在想哇,这一定不能得到支持。但是在VS2017中,当我去SQL Server资源管理器时,我可以"提取数据层应用程序"并选择"提取架构和数据的选项"对于所有表格。这样运行正常并产生一个" foo.dacpac"文件 - 用户界面提供了一个选项,用于"验证提取"我不加控制地离开了。

现在我感到困惑,因为我认为dacpac文件只包含模式,bacpac文件用于模式加数据 - 但是在提取数据层应用程序时#34;数据"通过visual studio它可以生成一个dacpac文件。这是否意味着我需要使用" Extract"行动而不是"出口" SqlPackage.exe的动作?

有人可以就此提供任何指导吗?

1 个答案:

答案 0 :(得分:1)

这是我发现的。

要提取架构和数据,您需要使用/ Action:Extract NOT / Action:Export。

"出口"生成包含数据的bacpac文件。如果源数据库中的对象(触发器,sprocs等)具有外部引用,则会出现这种情况。似乎无法解决这个问题。

"提取"生成一个dacpac文件,并且还可以选择包含数据,还可以禁用验证(默认情况下禁用),这样您就可以解决对外部对象的引用这一事实。

出口在其能力方面似乎被忽略了,而Extract更灵活。

这非常令人困惑。