GSP vs Microsoft ScriptDom: beyond T-SQL in .NET

Microsoft ScriptDom is the definitive T-SQL parser for .NET — free, first-party, the engine inside DacFx, and better than GSP at T-SQL. It is MIT-licensed, so you may ship it inside your own commercial product for free, and we are not going to pretend otherwise. If SQL Server is your only dialect, use it and keep your money. General SQL Parser is for .NET teams whose SQL does not stop at T-SQL: 15 dialects behind one API, semantic name resolution, column lineage, and — if you ship it to your own customers — a counterparty rather than a warranty disclaimer.

Short answer

ScriptDom if T-SQL is the whole job. GSP if your .NET product has to read Oracle, Teradata, Db2, Snowflake or the legacy warehouse dialects as well, if you need column lineage rather than a parse tree, or if you are redistributing a parser commercially and need a counterparty rather than a disclaimed warranty. The two coexist happily: ScriptDom for T-SQL, GSP for everything it does not cover.

What a permissive licence does not give you

This is what decides most commercial evaluations, and it has nothing to do with grammar quality. MIT lets you ship ScriptDom inside your product. It also disclaims warranties, so the risk stays with you.

 ScriptDom (MIT)GSP (commercial)
Shipping it inside your commercial productPermitted. MIT lets you redistribute — with warranties expressly disclaimed and no indemnity to you or your customer.A Distribution License: a named contract covering redistribution in your product, with Gudu carrying obligations rather than disclaiming them.
When a customer’s SQL breaks the parserYou file a GitHub issue against a Microsoft repository and take your place in a very large queue.You send the failing statement and it is scheduled into a release. That obligation is most of what you are paying for.
Non-SQL-Server dialectsOut of scope by design, and no roadmap will change that — ScriptDom is the T-SQL parser.15 dialects on .NET behind one API, 42 on Java.
Procurement, security and legal reviewMicrosoft is a counterparty for your SQL Server licence, but not for this library — the MIT grant stands alone.A company on the other side of a contract: security review, VPAT and audit questions get answered by a person.

Capability by capability

ScriptDom wins the first row. A comparison where the vendor wins everything is not worth reading.

CapabilityMicrosoft ScriptDomGSP (.NET)
T-SQL parsing qualityFirst-party and definitive. Tracks SQL Server releases, versioned parser classes, and it is the engine inside DacFx — better than GSP for T-SQL-only workStrong, but we are not going to claim we beat Microsoft at its own dialect
CostFree, MIT, tens of millions of NuGet installsCommercial, with a 90-day free trial
DialectsT-SQL only15 on .NET — Oracle, Teradata, Db2, Snowflake, Redshift, PostgreSQL, MySQL, Hive, Impala, Informix, Netezza, Sybase, Greenplum, MDX and T-SQL
Runs in-process on .NETYesYes — native .NET, no Python or JVM sidecar
Procedural SQLFull T-SQL procedural support — batches, TRY/CATCH, control flowProcedural support across dialects: PL/SQL packages, types and triggers; Db2 SQL PL; Teradata procedures and BTEQ
Name resolutionA parse tree with rich T-SQL fidelity; resolving which table a column belongs to is left to youSemantic resolution with confidence scores and evidence, including scope trees, ambiguity and star-expansion surfaces
Column-level lineage on .NETNot provided — ScriptDom is a parser, not a lineage engineColumn lineage traced through CTEs and UNION branches, with Oracle PL/SQL package and block resolution
Offline validationParse errors with positions, T-SQL onlyValidation with error positions across all supported dialects, no database connection
SQL formattingScript generation via SqlScriptGeneratorDedicated formatter, 72+ style options

Stay on ScriptDom when

  • SQL Server is your only dialect — this is the common case and it is a good answer.
  • You want first-party fidelity that tracks SQL Server releases.
  • You need a parse tree and are happy to build resolution on top yourself.
  • You are building internal tooling, where a warranty disclaimer costs you nothing.

Pay for GSP when

  • Your .NET product must read Oracle, Teradata, Db2, Informix, Netezza, Sybase or Snowflake as well as T-SQL.
  • You need column-level lineage, not a parse tree.
  • You redistribute a parser inside a product you sell, and procurement asks who is accountable.
  • A parse failure in front of a customer is an incident with a deadline.
  • A Python sidecar or embedded runtime is not acceptable in your deployment.

Test it on the SQL that actually breaks parsers

  1. Pull 20–100 real statements from every database your product touches — not just SQL Server.
  2. Run the T-SQL through ScriptDom. It will almost certainly pass, and that is the point: you are measuring what is left over.
  3. If nothing is left over, you are done and you do not need us.
  4. If there is a non-T-SQL remainder, send it to us. We will say which dialects GSP .NET covers today, which are Java-only, and what lineage depth you actually get on .NET.

Common questions

Should we just use ScriptDom?

If SQL Server is your only dialect: yes, and stop reading. ScriptDom is free, MIT-licensed, first-party, tracks SQL Server releases, ships inside DacFx and has tens of millions of installs. For T-SQL-only work it is a better choice than GSP and we will say so plainly. The only reason to look further is if your SQL does not stop at T-SQL, or if you need lineage rather than a parse tree.

ScriptDom is MIT. Can we not just ship it in our product for free?

Yes, and we will not imply otherwise. MIT permits redistribution. What it does not do is transfer risk: warranties are disclaimed, so when your customer hits a parse failure the cost and the deadline are yours, and Microsoft has no obligation to you for this library. A Distribution License is about who carries that obligation. For internal tooling that is worth nothing; for software sold into regulated enterprises it is often the whole reason for the purchase.

Is the free-alternative situation on .NET really different from Java and Python?

Yes, and it is the most honest argument we have. On Python you have sqlglot with 30-plus dialects; on the JVM you have JSqlParser and Apache Calcite in-process. On .NET the free options are ScriptDom (T-SQL only, excellent) and SqlParserCS (a port of Rust sqlparser-rs — around 11 dialects, syntax-only, no semantic analysis or lineage, and no stable release since April 2025). Reaching sqlglot from .NET means embedding a Python runtime or running a sidecar; both work, and we are not aware of a named .NET product vendor doing it in production. So for multi-dialect .NET parsing the free pressure is genuinely weaker — which is a statement about the .NET ecosystem, not about our grammar being clever.

Can we use both?

Yes, and for SQL Server plus one or two other databases it is often the right shape. Keep ScriptDom for T-SQL, where it is first-party and free, and use GSP for the other dialects and for lineage. You pay only for what ScriptDom does not cover.

Does GSP .NET have the same lineage as the Java edition?

Not identical, and we would rather be precise than oversell it. The .NET edition resolves names semantically and traces column lineage through CTEs and UNION branches, and it resolves Oracle PL/SQL packages and blocks. The full Data Lineage package — the engine behind Gudu SQLFlow, covering multi-statement scripts, dynamic SQL and impact analysis end to end — is a Java-edition add-on. If lineage depth is the deciding factor for you, tell us what you need to trace and we will tell you which edition actually does it rather than guessing.