Где я могу получить стандарты ANSI или ISO для запросов RDBMS? - PullRequest
2 голосов
/ 01 июля 2010

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

Ответы [ 5 ]

3 голосов
/ 01 июля 2010

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

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

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

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

Сказав это:

2 голосов
/ 01 июля 2010

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

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

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

2 голосов
/ 01 июля 2010

Из Википедия :

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

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

Было бы предложено разработать стандартную группу запросов и разработать различные классы, которые содержат конкретную реализацию этого запроса для определенной целевой РСУБД..

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

1 голос
/ 01 июля 2010

Стандарт Sql-92 , вероятно, является тем, на который вы хотите нацелиться.Я считаю, что это поддерживается большинством основных РСУБД.

Вот менее краткая ссылка .Пример содержимого:

  • PostgreSQL Имеет представления.Нарушает стандарт, не допуская обновления представлений ...
  • DB2 Соответствует по крайней мере SQL-92.
  • MSSQL Соответствует по крайней мере SQL-92.
  • MySQL Соответствуетпо крайней мере SQL-92.
  • Oracle соответствует по крайней мере SQL-92.
  • Informix соответствует по крайней мере SQL-92.

Что-то еще, что вы могли бы рассмотреть, если вы используете .NET, это использовать фабричный шаблон в System.Data.Common , который хорошо выполняет абстрагирование специфики поставщика для ряда СУБД.

0 голосов
/ 01 июля 2010

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

...