Главный ответ
Простой способ? Я так не думаю. Итак, НЕТ.
Способ сделать это
Единственный способ - найти документы для каждой поддерживаемой СУБД.
Причина
Вы всегда можете найти в ANSI SQL зарезервированные слова, но в конце каждая СУБД будет иметь свои особенности.
Обходной путь
Давайте посмотрим на это с другой стороны: вместо того, чтобы ваши SQL-запросы избегали зарезервированных имен, вы можете заставить часть вашего кода экранировать столбцы в соответствии с СУБД.
Другие проблемы, с которыми приходится сталкиваться
Имена столбцов - не единственная ваша проблема. Черт, это даже не ваша главная проблема!
Если вы знакомы с GROUP_CONCAT
в MySQL, вы понимаете, о чем я. Его альтернативой в SQL Server является использование XML PATH
. Firebird имеет встроенную агрегатную функцию LIST
. В конце концов, у вас будет другой запрос к СУБД. Я знаю это из-за ...
Мой опыт
Мой анекдот "Был там, сделал это": я работал в компании, основной продукт которой должен был поддерживать существующую клиентскую RBDMS, которая может быть Oracle, SQL Server или Informix (не спрашивайте).
В конце концов это сработало так:
- Это простой запрос? Попробуйте написать так, чтобы он работал на всех СУБД;
- Разве это невозможно (имеется в виду: слишком сложно / займет много времени)? В вашем коде будет
IF
. Там нет выхода (BWAHAHA!), У вас будет один запрос для RDBMS.
- Все, что мы тестировали, мы тестировали 3 раза: по одному на СУРБД.
Заключение
Наличие в вашем приложении поддержки нескольких СУБД - отличная функция и очень убедительный аргумент в пользу продаж. Тем не менее, это не так просто поддерживать. Это действительно требует работы.
Вы можете подумать сейчас , что вы никогда не будете использовать специфичные для СУБД запросы. Но затем наступает день, когда нечетный запрос очень легко разрешается как SQL Server, так и Oracle, но по-своему. Однако попытается написать тот же запрос, используя ANSI SQL (конечно, почему бы и нет?), И это займет у вас несколько часов и может привести вас в бешенство. Опять "был там, сделал это". Но не верьте мне на слово: говорите с людьми и, самое главное, с прототипом!