Написание запроса alter table внутри оператора if - PullRequest
1 голос
/ 01 февраля 2011

У меня есть таблица Person, в которой есть столбец Status.Следующий код существует в файле sqlt, который я пытаюсь выполнить

if not exists(select 1 from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'Person' and  syscolumns.name = 'Status')

begin

    print "Inside the if statement" 

end


go

Это работает нормально, и ничего не печатается, поскольку таблица и столбец оба существуют.Если я изменю файл на следующий

if not exists(select 1 from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'Person' and  syscolumns.name = 'Status')
begin
    print "Inside the if statement"
    alter table Person
    add Status char(5) DEFAULT 'INVLD' NOT NULL
end

go

Это не работает, и я получаю следующее сообщение об ошибке:

Сообщение 2705, Уровень 16, Состояние 3

Сервер 'NEXUS', строка 6

Имена столбцов в каждой таблице должны быть уникальными.Имя столбца «Статус» в таблице «Персона» указывается более одного раза.

Почему оно входит внутрь, если в этом коде?Какое решение для этого?

1 Ответ

3 голосов
/ 01 февраля 2011

Я знаю, что вы не ищете этот ответ, но здесь говорится: не делайте этого.

Причина в том, что изменение структуры является частью общего обновления. Для данного проекта обновления происходят более одного раза (как и все время) и обычно включают более одного столбца в нескольких таблицах. Поэтому вы создаете (или используете) инструмент, который просто изменяет вашу структуру, и обрабатываете эту проблему отдельно от бизнес-логики, использующей определенный столбец.

...