문제
작업중 인 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
수표에도.
제휴하지 않습니다 StackOverflow