Ошибка при добавлении нового столбца и изменении значения в том же скрипте SQL - PullRequest
1 голос
/ 30 марта 2020

В одном скрипте SQL (SQL Server 2016) я хочу добавить столбец с помощью ALTER TABLE и изменить значения с помощью UPDATE:

IF NOT EXISTS (SELECT * FROM sys.all_columns  
               WHERE object_id = OBJECT_ID(N'MyTable') and NAME = 'MyAttribute')
BEGIN
    ALTER TABLE MyTable 
        ADD MyAttribute BIT NOT NULL DEFAULT(0);

    UPDATE MyTable 
    SET MyAttribute = 1;
END

, но я получаю ошибка

Неверное имя столбца 'MyAttribute'

для строки 5 (оператор update).

Фон для кода:

  • Сценарий запускается каждый раз, когда устанавливается новая версия программы для базы данных (я не могу изменить это поведение)
  • MyAttribute следует добавлять только в первый раз выполнение скрипта
  • Значение для всех существующих записей должно быть 1, но значение по умолчанию для всех новых записей должно быть 0

1 Ответ

0 голосов
/ 30 марта 2020

Они должны работать в разных партиях:

declare @new bit = 0;

IF NOT EXISTS (SELECT * FROM sys.all_columns  
               WHERE object_id = OBJECT_ID(N'MyTable') and NAME = 'MyAttribute')
BEGIN
    set @new = 1;
    ALTER TABLE MyTable ADD MyAttribute BIT NOT NULL DEFAULT(0);

END
Go
if @new = 1
begin
    UPDATE MyTable SET MyAttribute = 1;
end

РЕДАКТИРОВАТЬ:

IF NOT EXISTS (SELECT * FROM sys.all_columns  
               WHERE object_id = OBJECT_ID(N'MyTable') and NAME = 'MyAttribute')
BEGIN
    ALTER TABLE MyTable 
        ADD MyAttribute BIT NOT NULL 
        CONSTRAINT df_attr DEFAULT(1);
    ALTER TABLE MyTable
        DROP CONSTRAINT df_attr; 
    ALTER TABLE MyTable
        ADD CONSTRAINT df_attr DEFAULT 0 FOR MyAttribute; 
END
...