필자는 열이 존재하는지 확인한 후 열을 삭제하는 (겉으로보기에) 간단한 SQL 미리보기를 작성했습니다.
문제 : 열이 없으면 안에 코드가 있습니다. IF 절은 열을 찾을 수 없다고 불평합니다! 음, doh, 이것이 바로 IF 절 안에있는 이유입니다!
제 질문은 왜 실행해서는 안되는 코드가 오류를 일으키는 것입니까?T-SQL 블록이 실행되지 않아도 오류가 발생하는 이유는 무엇입니까?
여기에 코드 조각입니다 :
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
ALTER TABLE [dbo].[Table_MD]
DROP COLUMN timeout
END
GO
... 그리고 여기에 오류 발생 : 나는 마이크로 소프트 SQL Server 2005 Express Edition을 사용하고
Error executing SQL script [...]. Invalid column name 'timeout'
.
수정하십시오. sproc이 사용하는 임시 테이블이있을 경우에도이 오류가 발생합니다. – ConcernedOfTunbridgeWells
임시 테이블이 있으면 sproc를 컴파일 할 때 열이 확인됩니다. sproc이 실제로 테이블을 생성하는 곳에서 (예를 들어 select into를 사용하는 경우) sproc을 다시 컴파일하기 전에 테이블을 삭제해야 할 수도 있습니다. – ConcernedOfTunbridgeWells
이것은 아주 좋은 대답입니다 :) –