¿Dónde puedo conseguir los estándares ANSI o ISO para las consultas de RDBMS?

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

  •  01-10-2019
  •  | 
  •  

Pregunta

Quiero escribir algunas consultas que pueden trabajar en casi todas las bases de datos sin ningún SQLExceptions. Entonces, ¿dónde puedo conseguir los estándares ANSI para escribir las consultas?

¿Fue útil?

Solución

No estoy seguro de que te ayudaré.

Los vendedores son tacto y van tan lejos como aplicación de las normas y, a menudo los propios estándares son imprecisos suficiente de tal manera que nunca podría escribir una consulta que funcionaría con todos los ejecutores.

Por ejemplo, SQL 92 define el operador de concatenación como || pero tampoco MySQL ni MSSQL usan este (Oracle hace). Proveedor independiente de la concatenación de cadenas es imposible.

Del mismo modo, un carácter de escape estándar no se especifica cómo se maneja por lo que podrían no funcionar en todos los proveedores.

Una vez dicho esto:

Otros consejos

Wikipedia :

  

El estándar SQL no está disponible gratuitamente. Todo el estándar puede ser adquirido en la ISO como ISO / IEC 9075 (1-4,9-11,13,14):. 2008

Sin embargo yo no aconsejarle a seguir esta estrategia porque ningún motor de base de datos sigue ningún estándar SQL (SQL 99, 2003, etc.) a la carta. Todos ellos se toman libertades en la forma en que manejan las instrucciones o definen variables (por ejemplo, al comparar dos cadenas diferentes de sensibilidad caso mango motores de manera diferente). Un método que es muy eficiente con un motor puede ser terrible ineficaz para otro.

Una sugerencia sería el desarrollo de un grupo estándar de consultas y desarrollar diferentes clases que contienen la implementación específica de esa consulta para un determinado SGBDR de destino.

Espero que esto ayudó

Salida del BNF del núcleo de SQL gramáticas disponibles en http://savage.net.au/SQL /

Esto es parte de la respuesta - el resto, como en punta a cabo por Kiranu y MattMitchell, es que los diferentes proveedores implementan la norma de manera diferente. No se adhiere perfectamente a DBMS SQL-92, incluso, aunque la mayoría son bastante cerca.

Una observación: el estándar SQL no dice nada acerca de los índices - lo que no hay sintaxis estándar para la creación de un índice. También dice nada acerca de cómo crear una base de datos; cada proveedor tiene sus propios mecanismos para hacerlo.

El SQL-92 estándar es probablemente el uno que desea orientar. Creo que se apoya la mayoría de los principales sistemas RDBMS.

Aquí está una menos terso enlace . contenido de la muestra:

  • PostgreSQL tiene puntos de vista. Descansos estándar al no permitir cambios a vistas ...
  • DB2 Conforme a al menos SQL-92.
  • MSSQL Conforme a al menos SQL-92.
  • MySQL Conforme a al menos SQL-92.
  • Oracle Conforme a al menos SQL-92.
  • Informix Conforme a al menos SQL-92.

Otra cosa que podría considerar, si está utilizando .NET, es utilizar el patrón de fábrica en System.Data.Common que hace un buen trabajo de abstraer detalles del proveedor por un número de RDBMS.

Si usted está tratando de hacer un producto que va a trabajar en contra de varias bases de datos Creo que tratar de utilizar solamente SQL estándar no es el camino a seguir, como otras respuestas han indicado, debido a las diferentes interpretaciones '' de la norma. En su lugar debe ser posible tener una especie de capa de acceso a datos en la aplicación que tiene diferentes implementaciones específicas para cada base de datos. Dependiendo de lo que está tratando de hacer, hay herramientas como Hibernate, que hará lo que una gran parte del trabajo pesado en cuanto a esto para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top