2009-07-17 2 views
0

SQL Server를 받고 2005는 SQL 테이블 스크립트에 null 이외의 열을 추가 - 오류

다음은 Is_Active 열이 이전에 Dim_Form 테이블에 존재했다면 오류없이 SQL 작업의 3 개 라인을 다음과 같습니다.

예 : Is_Active가 이전에 존재하지 않았 으면 다음 세 줄을 실행하면 아래와 같은 오류가 발생합니다.

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 

가 지금은 성공적으로 SQL의 원래 3 개 라인을 실행할 수있는 실행하는 경우 - 어떤 아이디어가 발생하고 있습니까?

열의 이전 존재가 스크립트에 영향을주는 이유는 무엇입니까?

답변

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 개 라인을 실행, 삭제 확인 다시 .. 그것은 오류없이 작동합니다. –

+1

"세 번째 배치"에서 Is_Active 열을 삭제하고 3 개의 원래 줄을 실행합니다. 일괄 처리를 수행 할 때 Is_Active 열은 부분적으로 존재하지만 더 이상 존재하지 않지만 파서는 일괄 처리를 구문 분석하는 시점에서 SQL Server의 상태 만 볼 수 있기 때문에이 열을 볼 수 없습니다. –

+0

감사합니다. 그러나 Is_Active 열은 삭제 한 후에도 여전히 어디에 있습니까? 열을 삭제하고 연결을 닫은 다음 새 쿼리 창을 열어 원래 3 줄을 실행했으며 여전히 작동합니다. –

관련 문제