Единственный способ написать один запрос, который будет работать как для Oracle, так и для Sql Server, - это использовать только синтаксис, общий для обеих платформ. Как только вы используете функции, которые различаются между двумя языками (например, параметры или объединения), вы должны либо написать два разных запроса, либо собрать один класс «переводчик», который преобразует запрос с одной платформы на другую.
Я много занимался этим типом программирования (программное обеспечение, не зависящее от базы данных), и с помощью .Net относительно безболезненный способ сделать это - написать основное приложение, полностью работающее с ADO.Net DataTables / DataSets. с классом-оберткой, который обрабатывает создание DataTables из таблиц Oracle или Sql Server изнутри, а также обрабатывает постоянные изменения, сделанные в DataTables, обратно в Oracle или Sql Server. Этот подход изолирует ваш специфичный для БД код в одном месте, хотя это не обязательно жизнеспособный подход, если данные, к которым ваше приложение нуждается в доступе, большие.