Добавить ненулевой столбец в сценарий таблицы SQL - ошибка - PullRequest
0 голосов
/ 17 июля 2009

SQL Server 2005.

Следующие 3 строки sql работают без ошибок, если столбец Is_Active ранее существовал в таблице Dim_Form.

т.е. если Is_Active ранее не существовало, выполнение следующих 3 строк выдает ошибку, как показано ниже;

ALTER TABLE dbo.Dim_form add Is_Active bit NULL 
UPDATE dbo.Dim_form set Is_Active = 1
ALTER table dbo.Dim_form alter column Is_Active bit NOT NULL 

Я получаю эту ошибку только в том случае, если это «совершенно новый» столбец

Msg 207, Level 16, State 1, Line 2
Invalid column name 'Is_Active'.

Если я запускаю это

ALTER TABLE dbo.Dim_form add Is_Active bit NULL 
GO

UPDATE dbo.Dim_form set Is_Active = 1
ALTER TABLE dbo.Dim_form alter column Is_Active bit NOT NULL 

-- and now drop the newly created column
ALTER TABLE dbo.Dim_form DROP COLUMN Is_Active

Теперь я могу успешно запустить исходные 3 строки sql - есть идеи, что с этим происходит?

Почему предшествующее существование столбца повлияло на сценарий?

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

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

    ALTER TABLE dbo.Dim_form
        ADD Is_Active bit NOT NULL
           CONSTRAINT TEMP_ISACTIVE_CONSTRAINT_Dim_form DEFAULT 1

    ALTER TABLE dbo.Dim_form
        DROP CONSTRAINT TEMP_ISACTIVE_CONSTRAINT_Dim_form  
2 голосов
/ 17 июля 2009

Когда SQL анализируется в первой версии, столбец не существует. Таким образом, этап синтаксического анализа не проходит.

Во второй версии вы разделяете SQL на отдельные пакеты, поэтому каждый пакет анализируется сам по себе. Первый пакет создает столбец, второй пакет затем анализируется перед запуском, и все в порядке, поскольку столбец теперь существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...