如何从两个dacpac作为更新脚本获取数据更改

时间:2013-11-18 05:19:13

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

从两个.dacpac文件中,我可以使用以下命令获取更新脚本<​​/ p>

sqlpackage.exe / Action:Script /SourceFile:"C:\Test\bin\Debug\Test.dacpac“/ TargetServerName:localhost \ DenaliRC0 / TargetDatabaseName:deploy_Test

这怎么会只生成DDL更改(架构更改)。但这不包括任何数据变化。无论如何我可以从两个dacpacs获得那些数据更改(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"
});

1 个答案:

答案 0 :(得分:2)

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

我建议您查看有关部署前/后脚本的文章: http://schottsql.blogspot.com/2012/11/ssdt-pre-and-post-deploy-scripts.html

你也可以在这里看到我在SSDT上写的内容 - 你可能会发现一些有用的东西: http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html