Несколько минимальная минимальная версия того, что я пытаюсь сделать, сводится к следующему:
declare @VERSION_TO NVARCHAR(255);
declare @VERSION_CURRENT NVARCHAR(255);
set @VERSION_TO = '3.0.4401';
select @VERSION_CURRENT = VERSION from T_SYSTEM_INFO;
print 'target version: ' + @VERSION_TO
print 'current version: ' + @VERSION_CURRENT
if not @VERSION_CURRENT IN ('3.0.4300')
begin
raiserror( 'Patch not possible - unknown predecessor "%s"', 17, 10, @VERSION_CURRENT)
return
end
alter table T_JOB add CREATED [datetime];
update T_JOB set CREATED = (select top 1 STEP_START from T_JOB_STEP where T_JOB_STEP.JOB = T_JOB.ID and T_JOB_STEP.ID not in (select STEP from T_JOB_STEP_DEPENDENCY));
update T_JOB set CREATED = '01-01-2000' where T_JOB.CREATED is null;
alter table T_JOB alter column CREATED [datetime] not null;
update T_SYSTEM_INFO set VERSION = @VERSION_TO;
go
, но при обновлении после первого ALTER TABLE происходит сбой:
Сообщение 207, Уровень 16, Состояние 1, Строка 0
Неверное имя столбца «СОЗДАН».
если я добавлю 'go' после ALTER TABLE, он будет работать, но завершится с ошибкой при последнем обновлении:
Сообщение 137, уровень 15, состояние 2, строка 7
Необходимо объявить скалярную переменную "@VERSION_TO".
Я понимаю, что область действия переменных ограничена операторами go. В любом случае, я хочу иметь только один в конце, поэтому изменения отменяются, если что-то пойдет не так И если ничего из этого невозможно, как я могу выйти из всего сценария, если есть ошибка, а не только транзакция?
Может кто-нибудь погуглить для меня, пожалуйста? :)
спасибо