2009-07-17 27 views
0

SQL Server 2005的添加非空列到SQL表腳本 - 得到一個錯誤

以下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

這沒有回答我的問題,但是我使用的腳本始終如一地工作,不管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

當在第一個版本中解析SQL時,該列不存在。所以解析階段失敗。

在第二個版本中,您將SQL拆分爲單獨的批次,因此每個批次都是獨立分析的。第一批創建列,然後在運行之前分析第二批,因爲列現在存在,所以一切正常。

+0

確定您運行第一個'兩批'..這一點有道理,但'第三批'如成功創建列後刪除它,然後運行原來的3行時間再次..它工作沒有錯誤。 – 2009-07-19 07:30:40