Я работал над одним проектом, в котором было абсолютным требованием поддерживать множество баз данных, включая, по крайней мере, Access, SQL Server и Oracle.
Так что я знаю, что это можно сделать. В основном DML (SELECT, UPDATE, INSERT ...) одинаков, и, конечно же, у нас не было серьезных проблем с его работой во всех базах данных - только случайные неприятности. В то время MySQL был исключением, поскольку он просто не был достаточно способен.
Мы обнаружили большинство различий в DDL, но с правильной архитектурой (которая у нас была) это было несложно исправить.
Единственное, что вызвало у нас проблему, это генерация уникальных идентификаторов - автоинкремент не является стандартным. К счастью, в базе данных из 40 таблиц было только несколько мест, где требовались уникальные идентификаторы (хороший дизайн БД). В конце мы генерируем уникальный идентификатор в коде и обрабатываем любые конфликты (все в транзакциях).
Это упростило задачу, потому что мы избегали использования автоинкремента для полей идентификаторов, сложнее думать об уникальных ключах - но лучше в долгосрочной перспективе.