I've found the Microsoft.SqlServer.TransactSql.ScriptDom
parser @PatriceSc mentioned to be very useful for T-SQL code analysis. Below is an sample .NET 6 console application that uses a visitor to find T-SQL statements in the script. This references the latest NuGet package.
using Microsoft.SqlServer.TransactSql.ScriptDom;
SqlParser.Parse(@"
SELECT * FROM angebot
UPDATE angebot SET kunde = 13 WHERE kunde = 10033
");
public class SqlParser : TSqlFragmentVisitor
{
public override void Visit(TSqlStatement fragment)
{
Console.WriteLine($"Found statement {fragment.GetType().Name} at line {fragment.StartLine}, column {fragment.StartColumn}, length {fragment.FragmentLength}");
}
public static void Parse(string sqlScript)
{
var parser = new TSql160Parser(true);
IList<ParseError> parseErrors = new List<ParseError>();
var stringReader = new StringReader(sqlScript);
var fragment = parser.Parse(stringReader, out parseErrors);
if (parseErrors.Count > 0) {
throw new InvalidDataException($"{parseErrors.Count} parsing error(s)");
}
var visitor = new SqlParser();
fragment.Accept(visitor);
}
}
Output:
Found statement SelectStatement at line 2, column 1, length 21
Found statement UpdateStatement at line 3, column 1, length 49