Temporäre Tabellen werden nicht automatisch am Ende einer Abfrage gelöscht, sondern nur, wenn die aktuelle Verbindung zur DB getrennt wird oder Sie sie explizit mit DROP TABLE #columntable
löschen
Entweder zu Beginn der Abfrage auf Existenz der Tabelle prüfen oder am Ende immer löschen (am besten beides)
EDIT:Wie Matrin in seinem Kommentar sagte, ist dies eigentlich ein Analysefehler. Sie erhalten den gleichen Fehler, wenn Sie die SQL nur parsen, als wenn Sie sie ausführen.
Um das zu testen, habe ich Ihre Abfrage aufgeteilt und versucht:
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
Der Parser ist damit zufrieden. Interessanterweise wird die ursprüngliche Abfrage problemlos analysiert, wenn Sie zur Verwendung von nicht temporären Tabellen wechseln (ich bin mir der Probleme bewusst, die dadurch entstehen würden, ich war nur daran interessiert herauszufinden, warum die Abfrage nicht analysiert wird).