I know this is 12 years after your posting but I use Microsoft's SqlParser with considerable success. Try...
ParseResult results = Parser.Parse("SELECT * FROM Sys.Objects ORDER BY name");
ParseResults has an IEnumerable<ErrorBase> so you can find all the errors in the code. You get access to each of the TSQL batches in you script permitting you to parse each script individually. Each batch gives you SqlCodeObject but I recommend that you convert that those trees into a List<SqlCodeObject> because from there you can find about everything you want. The bonus is that the SqlCodeObject base class gives you the location of the segment of TSQL code so you can easily highlight that code in an editor.