|SQL Server in Azure VM||Managed Instance||Azure SQL Database (Singleton/Elastic Pool)|
|Backup & Restore||Yes||Yes||No|
- Azure SQL Database. It will present you with a report identifying all those, as well as possible fixes for the different Database Compatibility level available for your chosen target. For the migration, DMA/DMS has offline and online options. Offline allows you to either migrate just the schema or the schema and data in one shot. You would likely use this method for testing/POC, for small databases, or those applications that can afford longer downtime while you move the data. The online option allows you to keep the on-premises database and the Azure SQL Database continuously synchronizing after you have moved the initial schema/data. This way you have ample time for the Azure SQL Database to get caught up and then decide when to cut-over and start pointing your application to the Azure SQL Database. Microsoft's Doc has a detailed step by step on how to do both offline and online migration to Azure SQL Database.
ReplicationYou can add an Azure SQL Database as a subscriber to a transactional replication. This can let you migrate the data and objects from your on-premises SQL Server to Azure SQL Database. Since you cannot restore backups, you can only initiate this replication from a snapshot. Similar to online migration for DMS, you can start your synching well before your scheduled migration and when everything is synchronized, decide when you can cut-over and re-point your applications to the Azure SQL database. One thing to note, you can only replicate tables with a primary key. So if you have a number of tables without them, you'll need to get creative or pair it with other techniques to move those tables.
DACPACDacpac is a single file containing the definitions for your database schema - tables, view, stored procedures, functions, and other database objects. Sort of like a schema, only backup. You can create and restore one to Azure SQL Database using SSDT, SSMS or SQLpackage.exe. Since this only migrates your schema, you'll need to pair it with other techniques to bring your data to Azure SQL DB. You'd likely use this for POC/test or for new applications that do not require any data to migrate. You can create a dacpac file and deploy one using SSDT, sqlpackage.exe or SSMS.
BACPACBACPAC is similar to DACPAC but encapsulates both schema and data. So you can bring your entire database to Azure SQL Database. This single file stores the information in json format. This strategy is applicable to small databases. You can create a BACPAC file and import one using SSDT, sqlpackage.exe or SSMS.
Generate SQL ScriptsSql Server Management Studio has a Generate SQL Script UI. You can right click a database-> Tasks -> Generate SQL Scripts. If you've been working with SQL Server, you've probably used this before. What you may not have noticed before is when you click on Advanced, you can actually control what the script provides you. Specifically, you can change the Engined Type from Stand-Alone or Azure SQL Database. So the script provided is compatible with it. You can also actually specify on type of data to script whether to output Schema Only or Schema and Data. So for what it's worth, it is your TSQL version of DACPAC or BACPAC. The advantage of this is you can add/modify the resulting TSQL script as you need to. Similar to BACPAC, if you are scripting the data, it is applicable for small databases but not bigger databases. If you review the resulting script, it is actually writing your data as individual insert commands per row.