Ya hay un object llamado '## Temp' en la database

Tengo un procedimiento almacenado en SQL Server 2000. Contiene:
select ... into ##Temp ...
...
drop table ##Temp

Cuando ejecuto el procedimiento almacenado con ADO por segunda vez, indica:
Ya hay un object llamado '## Temp' en la database.
¿Alguien podría decirme amablemente qué sucede?

Debería volver a escribir el process almacenado para soltar la tabla temporal si existe, entonces nunca tendrá este problema

 IF (SELECT object_id('TempDB..##Temp')) IS NOT NULL BEGIN DROP TABLE ##Temp END 

Como eligió utilizar una tabla temporal global ##Temp , está visible para todas las conexiones de SQL en un momento dado. Obviamente, mientras el process almacenado se ejecuta para una connection, entra una segunda connection e intenta crear otra ##Temp pero eso ya existe ….

Use tablas #Temp connection local (solo una # ) en su lugar.

Oh, es todo mi culpa. Llamé al SP dos veces a través de una connection por error.
Es por eso que siempre informa el error al ser llamado por segunda vez.
Por supuesto que no lo sabrás leyendo mi descripción. Lo siento chicos…

Para mí, esta solución funciona:

 IF (SELECT object_id ='#Temp') IS NOT NULL BEGIN DROP TABLE #Temp END 

Está utilizando una tabla temporal global como lo indica el ## al comienzo del nombre de la tabla. Esto significa que varias sesiones pueden acceder a la tabla.

Es probable que tenga una connection abierta que creó la tabla, pero no pudo soltarla. ¿Estás seguro de que la primera ejecución de ADO realmente deja caer la table? ¿Pudo haber fallado o el control de flujo en el procedimiento omitió la statement de soltar?

Es posible que desee probar el procedimiento en el Administrador corporativo de SQL Server para ver si informa algún error.