You're abusing the GOs. GOs are batch separator, so variables won't be available in the next batch.
The following part is useless.
declare @columnz varchar (8000)
go
Remove all the GOs from your code and it might work correctly.
Luis C.
General Disclaimer:
Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?
How to post data/code on a forum to get the best help: Option 1 / Option 2