SQL dialect
SQL Server (T-SQL) SQL Parser for Java and .NET
General SQL Parser (GSP) parses SQL Server (T-SQL) with a dedicated, hand-tuned grammar — full AST access, offline syntax validation, formatting, rewriting, and column-level data lineage , including complete procedural SQL support. One commercial SDK, 38 dialects, Java and .NET.
Example
SQL Server (T-SQL) SQL that GSP parses
CREATE PROCEDURE dbo.usp_sync_target @id INT AS
BEGIN TRY
MERGE dbo.target AS t USING dbo.source AS s ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.val = s.val;
END TRY
BEGIN CATCH THROW; END CATCH; Parse it in Java
import gudusoft.gsqlparser.*;
TGSqlParser parser = new TGSqlParser(EDbVendor.dbvmssql);
parser.sqltext = sql; // the SQL Server (T-SQL) SQL above
if (parser.parse() == 0) {
System.out.println(parser.sqlstatements.size() + " statement(s) parsed");
} else {
System.out.println(parser.getErrormessage());
} The .NET edition exposes the same API in C# — see the C# quick start.
Coverage
What GSP handles in SQL Server (T-SQL)
- TRY/CATCH blocks
- Dynamic SQL (EXEC) lineage
- MERGE statements
- BULK INSERT and COPY INTO
- Partition functions and schemes
- Procedural SQL: T-SQL stored procedures, functions, triggers, BEGIN...END blocks, TRY/CATCH exception handling, and dynamic SQL (EXEC) with lineage folding
Beyond parsing, the same AST powers table/column extraction, validation, formatting, and column-level lineage for SQL Server (T-SQL).
Actively maintained
Recent SQL Server (T-SQL) parser updates
- 2026-06-30 [SQL Server] Don't fail unit on partial-fold dynamic-SQL re-parse
- 2026-06-28 [SQL Server] Resolve dynamic-SQL lineage with parameter bindings
- 2026-06-24 [SQL Server] Fold literal EXEC('<sql>') so it yields lineage
Full history in the release notes.
Go deeper
SQL Server (T-SQL) resources
- SQL Server (T-SQL) syntax reference — dialect documentation
- SQL Server (T-SQL) keyword compatibility — every keyword, and whether it can be an identifier
- Java quick start — Maven/Gradle setup and first parse
- C# quick start — NuGet setup for .NET
Common questions
Does GSP parse SQL Server (T-SQL) stored procedures and procedural SQL?
Yes. GSP parses T-SQL stored procedures, functions, triggers, BEGIN...END blocks, TRY/CATCH exception handling, and dynamic SQL (EXEC) with lineage folding into a full AST — procedure bodies become real statement trees you can traverse, not opaque text blocks. This is what makes lineage and impact analysis work inside procedural code.
Do I need a SQL Server (T-SQL) database connection to validate SQL?
No. GSP validates SQL Server (T-SQL) syntax completely offline. You get error line and column positions, the offending token, and a hint — with no server, driver, or credentials involved.
How complete is the SQL Server (T-SQL) grammar?
GSP uses a dedicated hand-tuned grammar for SQL Server (T-SQL) — not a generic SQL grammar with flags. The parser recognizes 586 SQL Server (T-SQL) keywords and knows which 537 of them can also be used as identifiers, which is exactly the kind of edge case that breaks generic parsers.
Can I use the SQL Server (T-SQL) parser from C# / .NET?
Yes. The .NET edition (NuGet package gudusoft.gsqlparser, .NET Standard 2.0) exposes the same API surface as the Java edition, so every SQL Server (T-SQL) parsing feature on this page works in C# and VB.NET.
Can GSP extract column-level lineage from SQL Server (T-SQL) SQL?
Yes. The built-in DataFlowAnalyzer produces column-level lineage, impact analysis, and call graphs from SQL Server (T-SQL) scripts — it is the engine behind Gudu SQLFlow and the lineage integrations for DataHub and OpenMetadata.