Tengo una aplicación cliente que crea una tabla temporal, realiza una inserción masiva en la tabla temporal, luego ejecuta algunos SQL utilizando la tabla antes de eliminarla.DROP TABLE falla para la tabla temporal
pseudo-código:
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
Esto está fallando con un error en la instrucción DROP:
No se puede eliminar la tabla '#Temp', ya que no existe o no tiene permiso .
No me puedo imaginar cómo podría ocurrir esta falla sin que algo más suceda primero, pero no veo ningún otro error que ocurra antes de esto.
¿Hay algo que me falta que podría estar causando esto?
Una sugerencia, mover la creación, inserción masiva, y las declaraciones y colocar fuera del bloque de transacción. No hay motivo ni necesidad de bloquearlo, ya que ninguna otra conexión puede acceder a él. –
@Philip Kelley: Esa no es una mala idea, veré si puedo hacer eso para limitar la duración de la transacción, pero no veo cómo podría estar causando este problema – StarBright
Parece que el error se está manifestando en el espacio en blanco . ;) Un script de reproducción completo arrojaría más luz sobre esto. – Aaronaught