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

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

安装 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/

相关文章:

reporting-services - 如何通过VSTS构建和部署SSRS项目?

sql-server - 需要 SSDT 循环引用/ Unresolved reference 解决方法

sql-server - Visual Studio 2017没有商业智能集成服务/项目

sql - 根据连续日期计算排名(如果日期之间有间隔天数,则返回 1)

visual-studio-2013 - 如果部署的数据库从其他源更改,如何在 Visual Studio 2013 中更新 SQL Server 项目?

sql-server - SSDT 禁用重命名 - 重构日志

sql-server - SQL Server 确定表列的物理大小

SQL Server 选择前 10-20 个结果?

java - 将大量记录插入 SQL 表的最快方法

sql-server - SQL Server - 聚集索引上的死锁