문제

작업중 인 SQL 스크립트가 있으며 열을 작성 (또는 편집) 한 다음 해당 새 열을 수정하려고 시도 할 때 문제가 발생합니다.

예를 들어:

BEGIN
    ALTER TABLE SampleTable ADD ColumnThree int 
END

IF (EXISTS (SELECT * FROM sys.columns WHERE name = 'ColumnThree'))
BEGIN
    UPDATE SampleTable SET ColumnThree = 0
END

이제 시작/끝 블록 이이 두 항목을 분리 할 것이라고 생각했지만 "잘못된 열 이름 'Columnthree'"오류가 발생합니다. 내가 이것을 실행하려고 할 때. 왜요? 첫 번째 시작/종료가 그 열을 시작하고 IF (열 이름이 존재하지 않으면 업데이트 문이 실행되지 않도록 보호해야합니다.

이런 일을하는 올바른 방법은 무엇입니까? (나는 이것이 필요한 몇 가지 비슷한 시나리오를 가지고있는 것 같습니다).

도움이 되었습니까?

해결책

당신은 필요합니다 GO, 아니다 BEGIN/END. 또한 편집 할 수 있습니다 EXISTS 올바른 테이블을 얻을 수 있도록 약간 쿼리하십시오.

ALTER TABLE SampleTable ADD ColumnThree int 
GO

IF (EXISTS 
        (SELECT 1 
         FROM 
             sys.columns c 
             INNER JOIN sys.tables t ON 
                 c.object_id = t.object_id 
         WHERE 
             t.name = 'SampleTable' 
             AND c.name = 'ColumnThree'))
BEGIN
    UPDATE SampleTable SET ColumnThree = 0
END

여러 스키마를 사용하는 경우 sys.schemas 수표에도.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top