Если вам не очень нравится ваш обходной путь, кажется, что единственная другая опция - это отделить вашу логику DDL от логики DML, т.е. один SP будет проверять / создавать столбец (возможно, другие столбцы тоже, если необходимо), другой SP устанавливает значение (я).
С другой стороны, похоже, что вы используете оператор UPDATE просто для предоставления значения по умолчанию для вновь создаваемого столбца. Если это так, вы можете рассмотреть совершенно другое решение: создать ограничение DEFAULT (нет необходимости в операторе UPDATE
). Здесь:
if not exists (select column_name from INFORMATION_SCHEMA.columns
where table_name = 'sample_table' and column_name = 'sample_column')
BEGIN
ALTER TABLE Sample_Table
ADD Sample_Column NVARCHAR(50) NOT NULL
<b>CONSTRAINT DF_SampleTable_SampleColumn DEFAULT ('1');
ALTER TABLE Sample_Table
ALTER COLUMN Sample_Column NVARCHAR(50) NULL;</b>
END
Вторая команда ALTER TABLE
предназначена только для снятия ограничения NOT NULL
, так как кажется, что вы не хотели, чтобы в вашем столбце было это ограничение. Но если у вас все в порядке с NOT NULL
, просто отбросьте второй ALTER TABLE
.