Где я могу получить стандарты ANSI или ISO для запросов RDBMS?

StackOverflow https://stackoverflow.com/questions/3155218

  •  01-10-2019
  •  | 
  •  

Вопрос

Я хочу написать некоторые запросы, которые могут работать практически во всех базах данных без каких-либо SQLExceptions. Итак, где я могу получить стандарты ANSI для написания запросов?

Это было полезно?

Решение

Не уверен, что поможет вам.

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

Например, SQL 92 определяет оператор конкатенации как || Но ни MySQL, ни MSSQL не используют это (Oracle do). Поставщика независимого строка Concatenation невозможно.

Аналогичным образом, стандартный эвакуатор не указан, так как вы обрабатывали, что может не работать во всех поставщиках.

Было сказано, что:

Другие советы

От Википедия:

SQL Standard не свободно доступен. Весь стандарт может быть приобретен у ISO как ISO / IEC 9075 (1-4,9-11,13,14): 2008.

Тем не менее, я бы не посоветовал вам следовать этой стратегии, потому что ни один двигатель базы данных не следует любому стандарту SQL (SQL 99, 2003 и т. Д.) В письме. Все они принимают свободы в том, как они обрабатывают инструкции или определяют переменные (например, при сравнении двух строк разные двигатели обрабатывают чувствительность случая по-разному). Способ, который очень эффективен с одним двигателем, может быть ужасен неэффективным для другого.

Предложение было бы разработать стандартную группу запросов и разработать различные классы, которые содержат конкретную реализацию этого запроса для определенных целевых RDBMS.

Надеюсь, это помогло

Проверьте BNF основных грамматий SQL, доступных в http://savage.net.au/sql/

Это часть ответа - остальное, как указано в Kiranu и Mattmitchell, заключается в том, что разные поставщики реализуют стандарт по-разному. СУБД не придерживается идеально для даже SQL-92, хотя большинство из них довольно близко.

Одно наблюдение: стандарт SQL ничего не говорит о показателях - поэтому нет стандартного синтаксиса для создания индекса. Это также ничего не говорит о том, как создать базу данных; У каждого поставщика есть свои собственные механизмы для этого.

То SQL-92 стандарт Вероятно, тот, который вы хотите нацелиться. Я считаю, что он поддерживает большую часть основных RDBMS.

Вот Меньше обработки ссылки. Отказ Образец содержимого:

  • PostgreSQL имеет вид. Разрывает стандарт, не позволяя обновлениям видов ...
  • DB2 соответствует хотя бы SQL-92.
  • MSSQL соответствует хотя бы SQL-92.
  • MySQL соответствует хотя бы SQL-92.
  • Oracle соответствует хотя бы SQL-92.
  • Informix соответствует хотя бы SQL-92.

Что-то еще, что вы могли бы рассмотреть, если вы используете .NET, это использовать Фабрика в System.data.common который делает хорошую работу по техническому обслуживанию поставщика для ряда RDBMS.

Если вы пытаетесь сделать продукт, который будет работать против нескольких баз данных, я думаю, что пытаясь использовать только стандартный SQL, не так, как указано другие ответы, из-за различных «интерпретаций» стандарта. Вместо этого вы должны по возможности иметь какой-то уровень доступа к данным в вашем приложении, который имеет разные реализации, специфичные для каждой базы данных. В зависимости от того, что вы пытаетесь сделать, есть такие инструменты, как Hibernate, которые будут так много тяжелого подъема в отношении этого для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top