Sql server 如何从两个DACPAC以更新脚本的形式获取数据更改

Sql server 如何从两个DACPAC以更新脚本的形式获取数据更改,sql-server,sql-server-data-tools,dacpac,Sql Server,Sql Server Data Tools,Dacpac,从两个.dacpac文件中,我可以使用以下命令获得更新脚本 sqlpackage.exe/Action:Script/SourceFile:“C:\Test\bin\Debug\Test.dacpac”/TargetServerName:localhost\DenaliRC0/TargetDatabaseName:deploy\u Test 无论如何,这只会生成DDL更改(模式更改)。但这不包括任何数据变化。我是否可以从两个DACPAC获取这些数据更改(DML) Flowing是我用来获取模式更

从两个.dacpac文件中,我可以使用以下命令获得更新脚本

sqlpackage.exe/Action:Script/SourceFile:“C:\Test\bin\Debug\Test.dacpac”/TargetServerName:localhost\DenaliRC0/TargetDatabaseName:deploy\u Test

无论如何,这只会生成DDL更改(模式更改)。但这不包括任何数据变化。我是否可以从两个DACPAC获取这些数据更改(DML)

Flowing是我用来获取模式更改的java代码

 CommandLineUtils.execute(this.log, "sqlpackage.exe", new String[]
{
  "/Action:Script",
  "/SourceFile:" + targetDacPac.getAbsolutePath(),
  "/TargetFile:" + previousDacPac.getAbsolutePath(),
  "/OutputPath:" + scriptOutput.getAbsolutePath(),
  "/TargetDatabaseName:changeme",
  "/p:ScriptDatabaseOptions=False",
  "/p:IgnoreAuthorizer=True",
  "/p:IgnoreLoginSids=False",
  "/p:DropObjectsNotInSource=True",
  "/p:IgnoreFilegroupPlacement=False"
});

我认为您需要查看部署前和部署后脚本,以处理将数据放入表和/或修改现有数据的问题。除了所谓的“bacpac”文件外,SSDT(及其前身)不处理项目内的数据。这是一个一次性的模式和数据组合,模式以普通XML格式存储,数据以本机格式BCP文件存储(如果我理解正确的话)

我建议查看这篇关于部署前/部署后脚本的文章:

你也可以在这里看到我在SSDT上写的内容-你可能会发现一些有用的东西:

您是否使用部署前或部署后脚本来处理数据更改?这就是您需要放置更改的地方,以便将它们从dacpac推送到服务器。您现在如何处理项目中的数据更改?我已经编辑了这个问题来解释我在代码中实际做了什么。我对这个地区很陌生。我要做的是从数据库中获取一个.dacpac文件,并进行一些DDL更改,如创建表和向其中插入数据。问题是我得到了对脚本的数据更改,但没有得到数据(插入)更改。是否有任何选项可以将这些数据更改也放入脚本文件?我正在脚本文件中获取create table部分,但insert语句未生成。据我所知,部署前和部署后脚本有助于在架构更改之前或之后操纵数据。但这不是实际需要的。但是,我需要在两个DACPATT(快照)中更改数据。可能更改数据捕获是实现此目的的一种方法。但是我想从两个dacpac文件中生成脚本形式的数据。到目前为止,这似乎是不可能的@彼得:谢谢你的回答。你的博客有很多关于SSDT的重要信息。在这种情况下,这是不可能的。bacpac文件是加载数据的一次性处理。dacpac文件主要用于同步模式,但也可以在部署前/部署后脚本中执行一些数据操作。您最好的选择可能是查看RedGate的SQL数据比较。如果使用Pro版本,可以自动进行比较和同步,但它只能在数据库之间工作。