自动创建数据库比较脚本并执行

时间:2017-11-01 20:01:39

标签: sql sql-server ssms sqlpackage sqlcompare

我有一种情况,我必须将我的数据库版本(架构)与我的所有客户端(可能是不同的版本)进行比较,并部署必要的更改以使所有版本都相同。我正在寻找一种方法来自动将我的数据库架构与我的客户端架构进行比较,生成差异脚本并执行它以确保所有版本都相同。

我了解Red Gate和类似的工具,但问题是我需要从我的客户端获取架构(很难获得)。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我终于找到了问题的可能解决方案。我使用SqlPackage实用工具生成dacpac,将客户端的dacpac与我的比较,创建差异脚本并部署更改。

以下是命令

制作Dacpac

  

sqlpackage.exe /动作:提取   / SourceServerName: DbServer / SourceDatabaseName: DbName   / TargetFile:" C:\ Working Folder \ Client.dacpac"   / p:IgnoreExtendedProperties = True / p:IgnorePermissions = False   / P:ExtractApplicationScopedObjectsOnly =真   / p:IgnoreUserLoginMappings = True / p:VerifyExtraction = True

比较Dacpacs并生成部署脚本

  

sqlpackage.exe / a:Script / sf:" C:\ Working Folder \ Primary.dacpac"   / tf:" C:\ Working Folder \ Client.dacpac" / TDN:"的 DBNAME " / OP:" C:\工作   文件夹\ DifferenceScript.sql"

运行脚本

  

sqlcmd -S DbServer -i" C:\ Working Folder \ DifferenceScript.sql" -o   " C:\ Working Folder \ Output.txt"

Output.txt 文件包含部署结果。所以我要做的就是运行这些命令并处理所有事情。

这是另一个有用的link