방아쇠를 여러 번 호출 할 수 있기 때문에 확실한 임시 테이블 #attributeType이 있는지 확인하고 싶습니다.# temp 테이블 (#attributeType)을 처리하는 Trigger를 만들고 있습니다. #temporary 테이블이 있는지 여부를 확인할 수 없습니다. else 문이있는 경우
이것은 임시 테이블을 검사 트리거 본문 내 코드입니다 : 나는 F5로를 선택하여 코드를 테스트 할 때
IF OBJECT_ID('tempdb..#attributeType') IS NOT NULL
BEGIN
DROP TABLE #attributeType
SELECT * INTO #attributeType
FROM attributeType
PRINT 'IN IF'+ CAST(OBJECT_ID('tempdb..#attributeType') AS NVARCHAR(80))
END
ELSE
BEGIN
SELECT * INTO #attributeType
FROM attributeType
PRINT 'IN ELSE'+ CAST(OBJECT_ID('tempdb..#attributeType') AS NVARCHAR(80))
END
은 내가 #attributeType 임시 테이블이 존재한다는,이 오류 메시지가 :
Msg 2714, Level 16, State 1, Line 11
There is already an object named '#attributeType' in the database.
내가 저장 프로 시저에 #tempTables가 SP 종료 즉시 삭제됩니다 알고 있지만, 내 코드가 잘못 왜 아직도 내가 이해할 수 없다?
N.B. ELSE 블록을 주석 처리하면 코드가 작동합니다.
@ Andomar-이 구문 분석 문제는 일종의 버그입니까? – Luther
버그가 아니며 원시 수준에 불과합니다. – Andomar
GO 본체를 트리거 본체에 배치하면 GO 문 앞에 선언 된 변수가 새 배치에서 보이지 않습니다. 내가 어떻게 이걸 처리해야하는지 생각 해봐. 첫 번째 명령문으로 If 절을 넣고 트리거 본문에서 GO를 수행 한 다음 모든 변수와 나머지 코드를 선언하면 트리거가 두 배치로 분할되어 실패합니다. – Luther