安装 Sql Server Data Tools 后,我尝试使用 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 服务器资源管理器时,我可以“提取数据层应用程序”并为所有表选择“提取架构和数据”选项。这运行良好并生成一个“foo.dacpac”文件 - 用户界面提供了一个“验证提取”的选项,我没有选中它。
现在我很困惑,因为我认为 dacpac 文件只包含架构,而
bacpac
文件用于模式加数据 - 然而,当通过 Visual Studio 提取“带有数据”的数据层应用程序时,它会生成一个 dacpac 文件。这是否意味着我需要使用“提取”操作而不是 SqlPackage.exe 的“导出”操作?任何人都可以提供任何指导吗?
最佳答案
这是我发现的。
要提取架构和数据,您需要使用/Action:Extract NOT/Action:Export。
“导出”会生成一个包含数据的 bacpac 文件。如果源数据库中的对象(触发器、sproc 等)具有外部引用,这将失败。似乎没有办法解决这个问题。
“提取”会生成一个 dacpac 文件,并且可以选择包含数据,并且您还可以禁用验证(默认情况下禁用),这样您就可以解决引用外部对象的事实。
看来Export在能力上被忽略了,Extract更加灵活。
这非常令人困惑。
关于sql-server - SqlPackage.exe 提取数据和架构验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49879279/