Tabel sementara tidak dihapus secara otomatis di akhir kueri, hanya ketika koneksi saat ini ke DB terputus atau Anda menghapusnya secara eksplisit dengan DROP TABLE #columntable
Baik menguji keberadaan tabel di awal kueri atau selalu menghapusnya di akhir (sebaiknya keduanya)
EDIT:Seperti yang dikatakan Matrin dalam komentarnya, ini sebenarnya adalah kesalahan penguraian. Anda mendapatkan kesalahan yang sama jika Anda hanya mengurai SQL seperti saat Anda menjalankannya.
Untuk mengujinya, saya membagi kueri Anda dan mencoba:
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
Pengurai senang dengan itu. Menariknya jika Anda mengubah menggunakan tabel non-temp kueri asli mem-parsing dengan baik (saya menyadari masalah yang akan timbul, saya hanya tertarik untuk mengetahui mengapa kueri tidak dapat diurai).