Как узнать, является ли имя столбца зарезервированным ключевым словом в разных базах данных - PullRequest
6 голосов
/ 14 августа 2011

У нас есть устаревший файл схемы со следующими именами столбцов. Мы хотели бы понять, не вызовет ли какой-либо из них проблему, если мы перенесем наше приложение на h2, mysql, postgres или oracle.

например, как я узнаю, будет ли это нормально для всех баз данных, перечисленных ниже. Есть ли хорошие инструменты, которые могут сделать предварительную проверку по этому поводу?

key
when
size
type
count
from
with

Ответы [ 4 ]

11 голосов
/ 14 августа 2011

Должно быть довольно легко получить список зарезервированных слов и построить таблицу зарезервированных слов. Вот несколько списков зарезервированных слов:

А вот онлайн-проверка: http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=on

1 голос
/ 15 августа 2011

DatabaseMetaData.getSQLKeywords() должен возвращать разделенный запятыми список зарезервированных слов в этой базе данных.Однако этот список не содержит ключевых слов ANSI SQL, таких как FROM.Однако я не совсем уверен, содержит ли он все ключевые слова во всех базах данных.

Для H2 список ключевых слов задокументирован под Keywords / Reserved Words .

1 голос
/ 14 августа 2011

Я не знаю ни о каких таблицах, но их не должно быть сложно отфильтровать, если у вас есть список имен таблиц и имен столбцов.

Oracle имеет представление V$RESERVED_WORDSв своем словаре данных.

Все, что вам нужно сделать, это сопоставить имена ваших таблиц / столбцов с этим: просто добавьте их во временную таблицу и присоединитесь к этому представлению.Если у вас есть результат для вашего запроса, то у вас есть зарезервированное слово.

Другие базы данных также могут иметь такие метаданные.

0 голосов
/ 14 августа 2011

Самый простой способ узнать это - попробовать. Все системы управления базами данных, которые вы упомянули, являются открытыми или бесплатными для загрузки и проб Запустите ваш SQL-скрипт с операторами CREATE TABLE и посмотрите, что получится.

Проблема с запросом этого без ссылки на реальный сценарий SQL заключается в том, что некоторые синтаксические анализаторы имеют различные классы зарезервированных слов. Некоторые ключевые слова могут быть перечислены в качестве ключевых слов, но все же можно использовать их в качестве имен столбцов, но, возможно, не в хитрой инструкции SELECT позже. Так что всегда лучше попробовать.

Я предлагаю, основываясь на списке, который вы даете, он не будет работать в большинстве систем SQL. Но вы всегда можете последовательно заключить двойные кавычки в идентификаторы, чтобы избежать проблем с ключевыми словами. (Однако вам нужно будет запустить MySQL в режиме ANSI.)

...