배경 : 주어진 이름의 임시 테이블로 "처리"하는 저장 프로 시저가 있습니다. 이 절차는 임시 테이블의 스키마를 검사 한 다음 스키마에 따라 다른 "물건"을 처리한다는 점에서 일반적입니다. 나는 이것이 이상하다는 것을 이해하지만 대부분의 상황에서 모든 것이 잘 작동하기 때문에 변경하기를 꺼린다. 예외적으로 ...SQL Server가 Temp Table을 아직 존재하지 않는다고 생각하는 이유는 무엇입니까?
임시 테이블에 대해 두 개의 다른 스키마를 만드는 저장 프로 시저가있는 경우 같은 이름. 논리적으로 IF의 어느 분기에 따라 하나의 임시 테이블 만 생성합니다. 문제는 SPROC가 SQL 서버에 의해 확인 될 때이는 IF의 양쪽 평가하고있다처럼 보인다이다
그래서이 SQL 실패 (는 SQL 구문을 확인 않다면 의미가 있습니다.) :
IF (1=1)
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL
)
END
ELSE
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL,
c BIGINT NOT NULL
)
END
--exec SomeProcedureWhichDoesStuffWith#Test
DROP TABLE #test
을 다음과 같은 오류와
는 :
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
IFS의 내부 드롭 테이블의 번호 조합 (이전 또는 이후에 작성 테이블 DDL)는 SQL 검사기를 만족시킬 것으로 보인다.
어떻게하면됩니까? 예를 들어, 구문 검사를 수행하지 않고 sproc을 그대로 사용하도록 SQL에 지시 할 수 있습니까?
네 감사합니다. 불행히도 그것은 sproc에 테이블을 생성하기 때문에 동일한 배치에 있어야합니다 (그래서 GO가 없습니다). –