【问题标题】:SqlPackage.exe Extract data and schema validationSqlPackage.exe 提取数据和架构验证
【发布时间】:2018-04-17 13:21:06
【问题描述】:

安装 Sql Server Data Tools 后,我尝试使用来自:C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\ 的SqlPackage.exe

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

现有的数据库并不是很好,因为它们具有跨数据库引用。我要导出的数据库对另一个名为“审计”的数据库有多个引用。涉及到触发器 - 希望您了解情况。

阅读文档后,我尝试了以下命令:

.\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”文件 - UI 提供了一个“验证提取”选项,我没有选中它。

现在我很困惑,因为我认为 dacpac 文件只包含架构,而 bacpac 文件用于架构加数据 - 但是当通过 Visual Studio 提取“带有数据”的数据层应用程序时,它会生成一个 dacpac 文件。这是否意味着我需要使用 SqlPackage.exe 的“提取”操作而不是“导出”操作?

谁能提供这方面的指导?

【问题讨论】:

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


    【解决方案1】:

    这是我发现的。

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

    “导出”生成一个包含数据的 bacpac 文件。如果源数据库中的对象(触发器、存储过程等)具有外部引用,这将失败。似乎没有办法解决这个问题。

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

    Export似乎在能力上被忽略了,Extract更加灵活。

    这很令人困惑。

    【讨论】:

    • 现在,当我尝试使用外部引用发布 .dacpac 时 - 它失败了,似乎没有参数可以忽略这些发布失败。任何已知的解决方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2012-09-11
    相关资源
    最近更新 更多