임시 테이블을 생성하고 임시 테이블에 대량 삽입을 수행 한 다음 테이블을 삭제하기 전에 일부 SQL을 실행하는 클라이언트 응용 프로그램이 있습니다.DROP TABLE이 임시 테이블에 대해 실패합니다.
의사 코드 :이 DROP 문에 대한 오류와 함께 실패
open connection
begin transaction
CREATE TABLE #Temp ([Id] int NOT NULL)
bulk insert 500 rows into #Temp
UPDATE [OtherTable] SET [Status]=0 WHERE [Id] IN (SELECT [Id] FROM #Temp) AND [Group]=1
DELETE FROM #Temp WHERE [Id] IN (SELECT [Id] FROM [OtherTable] WHERE [Group]=1)
INSERT INTO [OtherTable] ([Group], [Id]) SELECT 1 as [Group], [DocIden] FROM #Temp
DROP TABLE #Temp
COMMIT TRANSACTION
CLOSE CONNECTION
:
가 존재하지 않거나 권한이 없으므로 테이블 '#Temp'을 (를) 삭제할 수 없습니다 .
이 오류가 다른 일이 발생하지 않고 어떻게 발생할 수 있는지 상상할 수 없지만 그 전에는 다른 오류가 발생하지 않습니다.
이 문제가 발생할 수있는 것이 누락 되었습니까?
제안을 말한다 어디 어디 작성, 대량 삽입을 이동하고, 테이블의 이름을 입력하고 트랜잭션 블록 외부에서 문을 들러주세요. 다른 연결이 액세스 할 수 없으므로 잠글 필요가 없으며 필요가 없습니다. –
@Philip Kelley : 그건 나쁜 생각이 아니에요. 트랜잭션의 길이를 제한하기 위해 그렇게 할 수 있는지 알아볼 것입니다.하지만이 문제가 어떻게 발생하는지 알 수 없습니다. – StarBright
버그가 공백에 나타납니다. . ;) 완전한 복제 스크립트는 이것에 대해 더 많은 것을 밝힙니다. – Aaronaught