Ответ 1
Вам понадобится инструкция, ссылающаяся на новый столбец, который будет скомпилирован после добавления нового столбца. Один из способов сделать это - запустить его как дочернюю партию с EXEC
.
IF NOT EXISTS (SELECT *
FROM sys.columns
WHERE name = 'NewFieldName'
AND object_id = OBJECT_ID('dbo.MyTableName'))
BEGIN
-- Add NewFieldName column to part of the Summer 2012 release cycle.
ALTER TABLE dbo.[MyTableName]
ADD [NewFieldName] SMALLINT NOT NULL
CONSTRAINT DF_MyTableName_NewFieldName DEFAULT (2)
EXEC(' UPDATE [MyTableName] SET NewFieldName = 1 WHERE [Name] = ''FindMe''')
END
Причина, по которой это сработало для вас изначально, по-видимому, объясняется тем, что сама таблица не существовала, когда пакет был скомпилирован, что означает, что все инструкции в нем, ссылающиеся на таблицу, подлежат отсроченной компиляции.