J'ai une application client qui crée une table temporaire, effectue une insertion en bloc dans la table temporaire, puis exécute du code SQL à l'aide de la table avant de la supprimer.DROP TABLE échoue pour la table temporaire
Pseudo-code:
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
Ce échoue avec une erreur sur l'instruction DROP:
Impossible de supprimer la table '#Temp', parce qu'il n'existe pas ou vous n'êtes pas autorisé .
Je ne peux pas imaginer comment cet échec pourrait se produire sans autre chose, mais je ne vois pas d'autres défaillances se produisant avant.
Y a-t-il quelque chose qui me manque et qui pourrait causer cela?
Une suggestion, déplacez la création, insertion en vrac, et déposer des déclarations en dehors du bloc de transaction. Il n'y a aucune raison de le verrouiller, car aucune autre connexion ne peut y accéder. –
@Philip Kelley: Ce n'est pas une mauvaise idée, je vais voir si je peux le faire pour limiter la durée de la transaction, mais je ne vois pas comment cela causerait ce problème – StarBright
Le bug semble se manifester dans les espaces . ;) Un script complet de repro apporterait plus de lumière à ce sujet. – Aaronaught