SnowConvert AI to migrate a Synapse dedicated SQL pool. A few notes.
I spent the last couple weeks running a Synapse Dedicated SQL Pool through SnowConvert AI to see if it could carry a real workload — about 120 stored procs plus the usual DDL. Sharing the rough edges in case anyone else is sizing this up.
First thing nobody tells you up front: the AI features only kick in when your source is SQL Server. If you're coming from Synapse, what you get is a code converter. No live source connection, no data movement, no deploy-to-Snowflake, no AI verification step. You find this out by installing the thing. Extraction is manual.
You clone a separate Snowflake-Labs repo (SC.DDLExportScripts) and run extraction scripts by hand to pull your code out of Synapse. The scripts work fine (credit where it's due) but it does mean you start the migration by hand-cranking the part the marketing implies is automated.
The conversion itself runs in about a minute. Then you land on a "final report" page. There is no way to view the converted code from inside the UI. None. The app drops a folder on your filesystem and that's it. To see what it actually produced, I opened a file browser.
Now the fun part. Every single stored procedure failed to deploy. All of them. Same root cause: it had mis-converted a semicolon after SET NOCOUNT ON. One bug, applied uniformly, killed 100% of the output. Once I patched that across the tree, the success rate climbed to a still-grim 76%. 92 out of 117 made it through.
Of the remainder, the failure modes were varied enough to be interesting:
CREATE statements missing schema names entirely.
Working tables created in the wrong schema (it dropped them into tpcds instead of the dedicated work schema), so 13+ procs blew up at deploy time.
The UNPIVOT-equivalent pattern: not supported. Just fails.
Dynamic SQL: not supported. The tool inserts an error marker blocking deployment.
CROSS APPLY got rewritten as LEFT OUTER JOIN with an error marker injected, so it won't deploy either.
ERROR_SEVERITY(): tool can't handle it; another deploy blocker.
THROW got emitted with SQLCODE, a keyword Snowflake doesn't have.
A WHILE-loop variant came out with the wrong timestamp column type.
The category I lost sleep over, though, was the conversions that did deploy and were wrong. Synapse query labels never got mapped to Snowflake tags. The output compiled. It ran. It just did a different thing than the original. Nothing flagged it. If I hadn't been verifying behavior I'd have shipped it.
Runtime errors after deploy were their own genre. One converted procedure (an ALTER TABLE pattern rewritten as a LEFT JOIN against a table-valued function) hit "Unsupported subquery type cannot be evaluated" the moment I called it. The tool produced syntactically valid code Snowflake's own optimizer can't execute.
The reports are dense and not particularly useful. Mostly noise; the only section I found worth opening was TopLevelCodeUnits. Several of the error codes in the report link to Snowflake docs, and several of those links are broken — clicking the code gets you a 404. Diagnosing failures meant grepping the error message in Google.
On the whole I came away thinking the "AI" branding is doing a lot of heavy lifting for a tool that, for a Synapse source, is a syntactic translator that drops files in a folder and hands you a stack of broken links.
If you're staring down a Synapse-to-Snowflake migration: budget for hand-fixing the output, write your own behavioral diff harness, and don't believe the conversion percentage until you've actually run the procs!
Posted May 22, 2026, 8:44 PM UTC · locked