Bug: Template uses "\r\nGO" to detect batches for /postsql

I just spent a couple hours getting the /postsql switch to work on an .exe created with Packager. It worked fine for one script but not another, so I went digging. I found that the code template has a method RunSQLFile(string,string) that reads an sql file, chops it into batches using "GO" statements and calls the ExecuteSQLCommand(string) method.

I removed all the GO statements from my query, but no real change in output or functionality. I did some debugging on RunSQLFile and discovered it was still finding a "GO" somehow! Turns out the script had a GOTO statement on a newline, which matches "\r\nGO" perfectly. Thus, it was detecting a batch that didn't exist.

Workaround:
The workaround is fairly simple. I can just prevent my GOTO from matching "\r\nGO" by inserting white-space or by putting the GOTO at the end of the previous line.

Suggestion:
In my own sql script processing library, I use "\r\nGO\r\n", but I don't know if that's always appropriate. Also, specifically stating that GO is used to breakup the script into batches would be helpful to have documented somewhere - maybe on the info tab of the resulting .exe or maybe in the help embedded in sqlpackager.exe available from the command line.

I hope this helps make a great tool even better.
-Colby

Comments

Sign In or Register to comment.