如何使用msbuild來完成DB project的SchemaCompare的運行

近日,苦於不斷需要使用schema compare來更新數據庫的繁冗操作,決定潛心學習下如何使用msbuild來完成SchemaCompare的運行,初學版本爲:

1,首先構建你的Database Project,會生成dacpac文件

2,再使用手動模式進行SchemaCompare在VS中的操作,保存此操作,生成scmp文件

3,運行命令:msbuild E:\SolutionFolder\DatabaseProjFolder\Database.sqlproj /t:SqlSchemaCompare /p:target="dacpac file path" /p:SqlScmpFilePath="e:\DB.scmp" /p:XmlOutput="d:\1.xml" /p:Deploy="true"

出現錯誤:SchemaCompare error: The source participant is invalid or empty

Google答案,有些說需要增加VS版本號:/p:VisualStudioVersion=15.0

更改之後:msbuild E:\SolutionFolder\DatabaseProjFolder\Database.sqlproj /t:SqlSchemaCompare /p:target="dacpac file path" /p:SqlScmpFilePath="e:\DB.scmp" /p:XmlOutput="d:\1.xml" /p:Deploy="true" /p:VisualStudioVersion=15.0

運行出現同樣的錯誤。

輾轉之後,發現問題在於souce,而一直在糾結target,更改如下命令:

msbuild E:\SolutionFolder\DatabaseProjFolder\Database.sqlproj /t:SqlSchemaCompare /p:source="dacpac file path" /p:SqlScmpFilePath="e:\DB.scmp" /p:XmlOutput="d:\1.xml" /p:Deploy="true" /p:VisualStudioVersion=15.0

運行成功,並且直接更新上去,如下爲解釋:

/p:source:定義對比的source源

/p:SqlScmpFilePath="e:\DB.scmp":定義對比的scmp文件,其中文件定義已經包含了target的定義,此例中爲DB的ConnectionString

/p:Deploy="true" :直接將差異更新到target的數據庫中

至此,確認SqlSchemaCompare的命令可以正常在msbuild端運行並且能更新數據庫。

此後需要探索的問題爲:如何參數化使對比結果能排除登陸用戶對比

 

【參考】

1,https://blogs.msdn.microsoft.com/ssdt/2014/07/15/msbuild-support-for-schema-compare-is-available/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章