Сценарий проекта базы данных SQL Server до и после развертывания
Я добавил дополнительный столбец в таблицу,которую я хочу инициализировать с помощью запроса в сценарии post deployment. К сожалению, я не могу написать запрос, который можно запускать каждый раз, поэтому я ищу способ проверить в сценарии перед развертыванием, если столбец доступен, и передать аргумент или переменную в сценарий после развертывания, который затем выполнит запрос инициализации один раз.
Попытка 1: я попытался установить sqlcmd
var в сценарии перед развертыванием, но следующий синтаксис не допускается:
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
:setvar PerformInitQuery 1
Попытка 2: я также пытался использовать обычную переменную в скрипте перед развертыванием:
DECLARE @PerformInitQuery BIT = 0
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
SET @PerformInitQuery = 1
И доступ к нему в сценарии после развертывания:
IF @PerformInitQuery = 1
BEGIN
:r ".DeploymentScriptsPerformInitQuery.sql"
END
Эта последняя попытка, по-видимому, сработала при публикации проекта из Visual Studio, но не на нашем сервере сборки; который использует SqlPackage.exe
для публикации сгенерированного файла .dacpac
в базу данных.
Ошибка SQL72014: поставщик данных .Net SqlClient:
Msg 137, Уровень 15, Состояние 2, Строка 12
Необходимо объявить скалярную переменную "@PerformInitQuery "
1 ответ:
Вы можете попробовать использовать временную таблицу для хранения значений, которые вы хотите передать из скриптов pre в post;
/* Pre-Deployment Script Template -------------------------------------------------------------------------------------- This file contains SQL statements that will be executed before the build script. Use SQLCMD syntax to include a file in the pre-deployment script. Example: :r .\myfile.sql Use SQLCMD syntax to reference a variable in the pre-deployment script. Example: :setvar TableName MyTable SELECT * FROM [$(TableName)] -------------------------------------------------------------------------------------- */ select 'hello world' as [Col] into #temptable
Подобран в сценарии после развертывания;
/* Post-Deployment Script Template -------------------------------------------------------------------------------------- This file contains SQL statements that will be appended to the build script. Use SQLCMD syntax to include a file in the post-deployment script. Example: :r .\myfile.sql Use SQLCMD syntax to reference a variable in the post-deployment script. Example: :setvar TableName MyTable SELECT * FROM [$(TableName)] -------------------------------------------------------------------------------------- */ declare @var nvarchar(200) select @var = [Col] from #temptable print @var
Привет, мир
Обновление завершено.