Это вполне выполнимо, проблемы возникают, когда вы сталкиваетесь с различными грамматиками SQL - посмотрите, как Hibernate справляется с этим с использованием диалектов.
Популярные базы данных - Oracle, Sybase, MS SQL Server, MySQL - имеют небольшие различия в допустимой грамматике SQL. По сути, производители реализовали и расширили ANSI SQL по-разному.
Самый простой случай, о котором я могу подумать, это когда вы назначаете псевдонимы именам столбцов, некоторые базы данных требуют этого:
SELECT x AS y FROM some_table
, в то время как другие требуют:
SELECT x y FROM some_table
Есть еще много таких примеров, но суть в том, что при написании уровня абстракции запросов, который работает со всеми базами данных, вам необходимо абстрагироваться от концепции генерации SQL, чтобы ее можно было адаптировать к каждой базе данных, которую вы собираетесь поддерживать ( Как я уже сказал, Hibernate делает это, позволяя вам указать диалект, специфичный для используемой вами базы данных.