Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

C'è già un oggetto chiamato '#columntable' nel database

Le tabelle temporanee non vengono eliminate automaticamente alla fine di una query, solo quando la connessione corrente al DB viene interrotta o le elimini esplicitamente con DROP TABLE #columntable

Testare l'esistenza della tabella all'inizio della query o eliminarla sempre alla fine (preferibilmente entrambe)

EDIT:come ha detto Matrin nel suo commento, questo è in realtà un errore di analisi. Ottieni lo stesso errore se analizzi l'SQL solo come quando lo esegui.

Per testarlo ho diviso la tua domanda e ho provato:

if exists (select 1 from emp where id = 6)
  create table #columntable (newcolumns varchar(100))
GO
if not exists (select 1 from emp where id = 6)
  create table #columntable (oldcolumns varchar(100))
GO

Il parser ne è felice. È interessante notare che se si passa all'utilizzo di tabelle non temporanee, la query originale viene analizzata correttamente (mi rendo conto dei problemi che creerebbero, ero solo interessato a scoprire perché la query non veniva analizzata).