How to use it: print it or paste it into a Teams note. Every item is a yes or no. A provider who cannot answer the items in sections 1 to 3 before quoting is guessing at the price. The mechanics per source are on the migration hub, and the reasoning behind each section is in moving a SQL Server database into Microsoft 365 and moving an Access database off the shared drive. The cost and weeks for the SQL Server case are on SQL Server to Dataverse in NZ.
1. Inventory (before anyone quotes)
- Exact version and edition of SQL Server (
SELECT @@VERSION) or Access, and the Windows Server underneath. Check both against the end-of-support dates. - Every database on the instance, including the two nobody recognises, and whether each is still used.
- Row count of every table in the production database, and the size on disk.
- Every stored procedure, trigger, view and scheduled job, with one line each on what it does. Unknown is an acceptable answer at this stage; it is not acceptable at quote time.
- Every front end: Access forms and reports, a Windows or web app, Excel links, Power BI, anything with a connection string.
- Every integration: label printers, Xero or MYOB syncs, ODBC links, email jobs, a supplier portal. These are what people forget and what breaks on Monday.
- Who uses it, how many people on a busy day, and which two people know it best.
- Where the files live: attachments inside the database as blobs, or on a share it points at.
- A tested backup restored somewhere else, before anything else happens. Not the Friday USB drive.
2. Decide the home
- Biggest table over about 20,000 rows, or will be within three years? Leans Dataverse.
- Money on the records (invoices, payments, payroll hours, anything an accountant reconciles)? Leans Dataverse.
- More than three people editing on the same day? Leans Dataverse.
- Three or more tables that genuinely relate (not just a lookup)? Leans Dataverse.
- Need to prove who changed what and when? Dataverse.
- Mostly no to 10 to 14? SharePoint lists, no extra licence. Mostly yes? Dataverse, at NZ$32.40 per user per month on Microsoft's NZ price list. The reasoning: SharePoint or Dataverse.
- Licence line written down against real headcount, per month and per year, before the build is priced.
- Considered not migrating: supported vendor product, fine server with a bad front end, or under 500 rows and one user.
3. Fix the source first
- Delete or archive the tables nobody uses, with sign-off from whoever owns the data.
- Access Single and Double columns changed to Decimal if precision past five places matters (Dataverse floats keep five).
- Unique indexes listed, because they do not migrate automatically and become alternate keys by hand.
- Multi-value lookups and choice lists documented, so they map to Choice columns cleanly.
- Bad dates, orphaned rows and duplicate keys found and fixed in the source, not patched in the target.
- Column names translated: what "fld_x2" means, written next to it.
4. Trial load
- A separate dev environment or site, never the live tenant on the first attempt.
- Loaded by a repeatable method (Power Platform dataflows, Microsoft's Access export to Dataverse, or a scripted import), so it can run again on cut-over day.
- Row counts reconciled per table against the source, and a handful of known records checked by hand.
- Every validator failure read and either fixed at the source or accepted in writing.
- Autonumbers continue the old sequence for job and invoice numbers where the business relies on them.
5. Rebuild the front end and logic
- Each stored procedure, trigger and macro mapped to a flow, a business rule, app logic, or deliberately dropped, in a table you can read.
- The app built around the three things people do, not a copy of the old grid.
- Tested by the two people who know the old system best, on the devices they actually use.
- Every integration from item 6 re-pointed and tested end to end.
- Reports rebuilt as views or Power BI, and the one report the owner looks at on Friday confirmed working.
6. Cut over
- A named cut-over day, usually a Friday, with the old system frozen read-only from that afternoon.
- Final load, counts and totals reconciled, sign-off recorded before Monday.
- Old server or file kept intact and switched off for 60 days, then wiped and disposed of properly.
7. Hand-over
- Source, credentials and admin rights in your own accounts, not the provider's.
- A written map of what lives where, which flows exist, who owns each, and what licence each person holds, plus a warranty period and a plain answer to what happens if the provider is unavailable.
Why the trial load runs on a copy of real data, and what made-up records are still good for: building on fake data first.
Copying this checklist
Copy it freely, with a link: SQL Server and Access migration checklist, Kove, September 2026. kove.nz/sql-migration-checklist. If you want the same list applied to your system with the answers filled in, that is what the first call is for.
The same list is on GitHub as Markdown, with a read-only T-SQL script that answers most of section 1 in one run and a PowerShell script that maps a database's columns to Dataverse types: sql-to-dataverse-migration-checklist. Fork it, fix it, hand it to your provider.