2016-02-01 4 views
0

Я создаю DacPac в TeamCity, создав проект sql. В результате DacPac имеет сценарий пост-развертывания, который я хотел бы обновить либо при развертывании, либо до его создания с номером версии. Можно ли установить этот параметр либо в TeamCity, либо при развертывании DacPac?Параметры после развертывания в DacPac

sqlpackage.exe командная строка выглядит

C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /Action:Publish /Sourcefile:#{SourceFolder} /TargetDatabaseName:DBName /TargetServerName:#{SqlServer} 

Где "# {}" является параметром на осьминога развертывания сервера. Сценарий развертывания поста в проекте SQL выглядит следующим образом:

declare @version varchar(10) 
set @version = 'z' 
IF EXISTS (SELECT * FROM tVersion) 
UPDATE VersionTable SET Version = @version 
ELSE 
INSERT INTO VersionTable VALUES (@version) 

образом я делал это с помощью файл контент заменителя на TeamCity, чтобы заменить «Z» с номером версии, но этот метод не является идеальным. Это может привести к ошибкам в будущем, если другой разработчик должен был проверить файл с другим параметром, который не соответствовал регулярному выражению, используемому в функции создания компоновщика содержимого содержимого.

ответ

2

У вас есть несколько различных подходов, которые вы можете предпринять, первый из них самый простой в том, что вы определяете переменную SqlCmd в своем .sqlproj (свойствах вкладки переменных проекта, SQLCMD) и ссылаетесь на то, что это сценарий развертывания post , При развертывании вы можете переопределить переменную с помощью/v: variable_name = (Если вы не используете sqlpackage.exe для развертывания, что вы используете? Octopus deploy?).

Второй способ сложнее, но довольно прямолинейный, dacpac можно читать и писать с использованием упаковки .net api, есть поток (файл), называемый postdeploy.sql (откройте его как zip-файл и очевидно, какой из них - файл после развертывания), вы можете прочитать его, изменить свое конкретное значение и затем записать его снова.

Для более ручного редактирования в dacpac смотрите:

https://github.com/GoEddie/Dacpac-References

Ed

+0

Привет Эд, Спасибо за предложения, я использую sqlpackage.exe, как указано в вопросе. Я дам переменные SQLCMD маршрутом, так как моя самая большая проблема со вторым вариантом заключается в том, как открыть dacpac и отредактировать файл после развертывания. Это достаточно просто, чтобы вручную отредактировать файл в .zip, а затем отредактировать файл postdeploy.sql, но, похоже, это будет несколько сложнее при использовании развертывания octopus. Чтобы уточнить: «v: variable_name =», если я поместил это в свою sqlpackage, в командной строке exe, он изменит переменную при развертывании? Еще раз спасибо! Adam –

+0

yes that is right/v: variable_name = value :) –

+0

Thanks Ed. Это отлично работает. –

Смежные вопросы