2015-07-22 3 views
4

Я пытаюсь создать выходной файл dacpac, который затем могу развернуть в разных средах. До сих пор я не развертывает непосредственно от MSBuild, используя цель опубликовать, что-то вроде:Различия между SqlPackage.exe и MsBuild SqlPublishTask

msbuild dbproject.sqlproj /t:Build;Publish /p:SqlPublishProfilePath=test.publish.xml /p:UpdateDatabase=True /p:PublishScriptFileName=test.sql 

Размер Ouput сценария генерируемой (только для справки, как UpdateDatabase устанавливается истина) является 2.5MB.

Мой новый подход заключается в том, чтобы просто построить проект, сохранить dacpac, а затем развернуть с помощью sqlpackage с действием «Опубликовать». Этот новый метод сообщает о некоторых предупреждениях, о которых не сообщалось в msbuild SqlPublishTask.
Для справки я побежал следующую команду:

sqlpackage.exe /action:script /outputpath:test.sql /sourcefile:dbproject.dacpac /pr:test.publish.xml 

и размер выходного сценария теперь 4.9MB.
Конкретные предупреждения, о которых идет речь, не являются предметом озабоченности, беспокойство заключается в том, что сценарий отличается, мой вопрос в чем разница?
и что еще более важно, какой из них был бы лучшим/безопасным способом для развертывания?

ответ

1

Sqlpackage.exe более подробно и включает в себя больше объектов во время развертывания, он отменяет права доступа к таблицам, чтобы избежать каких-либо изменений во время модификации объектов, а затем он продолжает создавать или изменять их.
Разница в том, что ВСЕ объекты включены в скрипт sqlpackage независимо от того, являются ли они разными или нет из целевой базы данных.

Несмотря на то, что предупреждения были не в первую очередь обеспокоены, используя метод sqlpackage, я обнаружил, что некоторые процедуры хранения не были в решении, только в базе данных. Эти «сироты» sp ссылались на таблицы, которые были развернуты, что дает предупреждение о том, что изменение таблицы может нарушить sp.