Recently I was working on some SQL scripts using TSQL in SQL Server Management Studio and from force of habit I was using the "GO" statement between each of my SQL statements to seperate them.
I then started re-factoring the SQL, creating variables where I had hardcoded values etc. and placed those variable declarations at the top of the script.
After re-factoring, I executed the scipt and got an error message saying that the variable @varName was not defined?
I checked for any typos...none. I then started breaking down the script to see if I could isolate the issue. When I removed the "GO" statements, the script executed without error.
It turns out that "GO" is not a TSQL statement, but rather a command that is recognised by the sqlcmd and osql utilities and SQL Server Management Studio. These utilities interpret the "GO" statement as a signal that it should send the current batch of TSQL statements to an instance of SQL Server. Therefore any variables declared before the last "GO" and the next will NOT be available in the current batch of statements.
Just for fun I then copied my TSQL into a <cfquery> and when I executed this, found that the same error was thrown.
One to watch out for if you're not familiar with the true definition of the "GO" statement.
Full details of the "GO" statement can be found here: http://msdn.microsoft.com/en-US/library/ms188037(v=SQL.90).aspx