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

Har*_*dra 3 sql sql-server ssms sqlcompare sqlpackage

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

我知道 Red Gate 和类似的工具,但问题是我需要从我的客户端获取模式(这很难获得)。

提前致谢。

Har*_*dra 5

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

这是命令

创建 Dacpac

sqlpackage.exe /Action:Extract /SourceServerName: DbServer /SourceDatabaseName: DbName /TargetFile:"C:\Working Folder\Client.dacpac" /p:IgnoreExtendedProperties=True /p:IgnorePermissions=False /p:ExtractApplicationScopedObjectsOnly=True /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:\Working Folder \DifferenceScript.sql"

运行脚本

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

Output.txt文件包含部署的结果。所以我所要做的就是运行这些命令,它会处理一切。

这是另一个有用的链接