Tabele tymczasowe nie są automatycznie usuwane na końcu zapytania, tylko wtedy, gdy bieżące połączenie z bazą danych jest usuwane lub jawnie usuwasz je za pomocą DROP TABLE #columntable
Przetestuj istnienie tabeli na początku zapytania lub zawsze usuń ją na końcu (najlepiej oba)
EDYCJA:Jak powiedział Matrin w swoim komentarzu, jest to w rzeczywistości błąd analizy. Otrzymasz ten sam błąd, jeśli tylko przeanalizujesz kod SQL, tak jak podczas jego wykonywania.
Aby to sprawdzić, podzieliłem Twoje zapytanie i spróbowałem:
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
Parser jest z tego zadowolony. Co ciekawe, jeśli zmienisz na używanie tabel innych niż tymczasowe, oryginalne zapytanie analizuje się dobrze (zdaję sobie sprawę z problemów, które mogą stworzyć, chciałem tylko dowiedzieć się, dlaczego zapytanie nie zostało przeanalizowane).