Migrating SQL Server to Fabric changes more than the server. It changes types, collations, and sometimes table layout. Validation has to tell those planned changes apart from the ones nobody meant to make.
This page covers the Fabric specifics. The general migration method explains the five pieces any migration needs, whatever the tool.
What Fabric changes on purpose
From Microsoft Learn’s Fabric data types, checked November 3, 2026:
| SQL Server type | Fabric Warehouse alternative | What a comparison test may see |
|---|---|---|
| datetime, smalldatetime | datetime2 (up to 6 fractional digits) | Shifted minimum or maximum dates if precision changes |
| datetimeoffset | datetime2 | The offset isn’t stored, so decide how you convert |
| money, smallmoney | decimal | Sums match if scale is kept |
| nchar, nvarchar | char, varchar (UTF-8 collation) | Text should match; storage size can differ |
| text, ntext | varchar | Values over 16 MB don’t fit varchar(max) |
| tinyint | smallint | No value change |
| xml | No equivalent | Column needs a new home |
Collation changes too. Strings in a lakehouse’s SQL analytics endpoint use Latin1_General_100_BIN2_UTF8, a binary collation, while SQL Server’s default is case-insensitive. TestGen’s migration docs note that a case-insensitive source counts ACME and acme as one distinct value, so Match Distinct Count can fail on a correct copy.
Write each of these into your expected-differences list before cutover.
The steps with TestGen
The workflow is TestGen’s Verify a Data Migration procedure:
- Connect TestGen to SQL Server with a read-only SQL login. In the source table group, turn on Profile for table comparison and turn off profile sampling.
- Run data profiling on the source, then generate a test suite with only the Table Comparison generation set.
- Connect TestGen to Fabric through the SQL analytics endpoint, with an Entra ID service principal or managed identity. Create a destination test suite and exclude it from quality scoring.
- Write a mapping CSV of renamed tables and columns. Use
DROPfor columns you retired. - Run
transfer_tests.pywithout--apply, read the report, then run it with--apply. - Run the destination suite. Match each failure to your list.
Run it after every mock load, not only at cutover. In DataKitchen’s Jaffle Shop migration, 345 tests ran in five seconds.
What it catches and what it doesn’t
Table Comparison checks counts, null counts, lengths, sums, date ranges, frequent values and patterns, and value hashes, column by column. In DataKitchen’s testing on three public datasets it caught 774 of 785 planted changes. It’s not a row-by-row diff: a failure tells you which column changed, and you query both sides by key to find the rows. Text-hash tests need UTF-8 collations on the SQL Server side, which means SQL Server 2019 or later.
Licensing
A migration needs two connections, SQL Server and Fabric, at the same time. Open-source TestGen allows one, so plan on Enterprise at $100 per user and $100 per connection per month for the length of the project. Start at the Microsoft Fabric install page, and read How does TestGen verify a cloud data migration for the full feature walkthrough.