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 product | Permitted. 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 parser | You 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 dialects | Out 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 review | Microsoft 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.
| Capability | Microsoft ScriptDom | GSP (.NET) |
| T-SQL parsing quality | First-party and definitive. Tracks SQL Server releases, versioned parser classes, and it is the engine inside DacFx — better than GSP for T-SQL-only work | Strong, but we are not going to claim we beat Microsoft at its own dialect |
| Cost | Free, MIT, tens of millions of NuGet installs | Commercial, with a 90-day free trial |
| Dialects | T-SQL only | 15 on .NET — Oracle, Teradata, Db2, Snowflake, Redshift, PostgreSQL, MySQL, Hive, Impala, Informix, Netezza, Sybase, Greenplum, MDX and T-SQL |
| Runs in-process on .NET | Yes | Yes — native .NET, no Python or JVM sidecar |
| Procedural SQL | Full T-SQL procedural support — batches, TRY/CATCH, control flow | Procedural support across dialects: PL/SQL packages, types and triggers; Db2 SQL PL; Teradata procedures and BTEQ |
| Name resolution | A parse tree with rich T-SQL fidelity; resolving which table a column belongs to is left to you | Semantic resolution with confidence scores and evidence, including scope trees, ambiguity and star-expansion surfaces |
| Column-level lineage on .NET | Not provided — ScriptDom is a parser, not a lineage engine | Column lineage traced through CTEs and UNION branches, with Oracle PL/SQL package and block resolution |
| Offline validation | Parse errors with positions, T-SQL only | Validation with error positions across all supported dialects, no database connection |
| SQL formatting | Script generation via SqlScriptGenerator | Dedicated 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
- Pull 20–100 real statements from every database your product touches — not just SQL Server.
- Run the T-SQL through ScriptDom. It will almost certainly pass, and that is the point: you are measuring what is left over.
- If nothing is left over, you are done and you do not need us.
- 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.