Ho un'applicazione client che crea una tabella temporanea, esegue un inserimento di massa nella tabella temporanea, quindi esegue alcuni SQL utilizzando la tabella prima di eliminarla.TABELLA DROP non riesce per la tabella temporanea
pseudo-codice:
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
Questo sta venendo a mancare con un errore sul istruzione DROP:
Impossibile eliminare la tabella '#Temp', perché non esiste o non si dispone dell'autorizzazione .
Non riesco a immaginare come si possa verificare questo errore senza che succeda qualcos'altro, ma non vedo altri errori che si verificano prima di questo.
C'è qualcosa che mi manca potrebbe causare questo?
Un suggerimento, spostare il creare, inserimento di massa, ed e rilasciare dichiarazioni al di fuori del blocco di transazione. Non c'è motivo o necessità di bloccarlo, poiché nessun'altra connessione può accedervi. –
@Philip Kelley: Non è una cattiva idea, vedrò se posso farlo per limitare la lunghezza della transazione, ma non riesco a vedere come ciò causerebbe questo problema – StarBright
Il bug sembra manifestarsi negli spazi bianchi . ;) Un completo repro script potrebbe far luce su questo. – Aaronaught