Question

Je veux écrire des requêtes qui peuvent travailler dans presque toutes les bases de données sans SQLExceptions. Alors, où puis-je obtenir les normes ANSI pour écrire les requêtes?

Était-ce utile?

La solution

Je ne sais pas qui va vous aider.

Les vendeurs sont toucher et aller aussi loin que les normes et la mise en œuvre souvent les normes elles-mêmes sont assez imprécises telles que vous ne pourriez jamais écrire une requête qui fonctionnerait avec tous les implémenteurs.

Par exemple, SQL 92 définit l'opérateur de concaténation comme || mais ni MySQL, ni MSSQL utiliser ce (Oracle fait). Fournisseur concaténation de chaîne indépendante est impossible.

De même, un caractère d'échappement standard n'est pas spécifié alors comment vous avez géré cela pourrait ne pas dans tous les vendeurs.

Cela dit:

Autres conseils

De wikipedia :

  

Le standard SQL est pas librement disponible. La norme tout peut être acheté à l'ISO comme ISO / CEI 9075 (1-4,9-11,13,14). 2008

Cependant, je ne vous conseille pas de suivre cette stratégie car aucun moteur de base de données suit toute norme SQL (SQL 99, 2003, etc.) à la lettre. Tous d'entre eux prennent des libertés de la façon dont ils gèrent les instructions ou définir des variables (par exemple, lorsque l'on compare deux chaînes différents moteurs poignée de sensibilité cas différemment). Une méthode qui est très efficace avec un moteur peut être terrible inefficace pour une autre.

Une suggestion serait de développer un groupe standard de requêtes et de développer des classes différentes qui contiennent la mise en œuvre spécifique de cette requête pour un certain SGBDR cible.

Hope this aidé

Consultez la BNF de SQL de base disponible à http://savage.net.au/SQL /

Cela fait partie de la réponse - le reste, comme en pointe par Kiranu et MattMitchell, est que les différents fournisseurs mettent en œuvre la norme différemment. Non SGBD adhère parfaitement à même SQL-92, bien que la plupart sont assez proches.

Une observation: la norme SQL ne dit rien sur les index - donc il n'y a pas de syntaxe standard pour la création d'un index. Il dit rien sur la façon de créer une base de données; chaque fournisseur a ses propres mécanismes pour le faire.

Le Sql-92 norme est probablement la celui que vous souhaitez cibler. Je crois qu'il est pris en charge la plupart des SGBDR majeur.

Voici un lien moins laconique . Exemple de contenu:

  • PostgreSQL a des vues. Les pauses standards en ne permettant pas de mises à jour des vues ...
  • DB2 Conforme à au moins SQL-92.
  • MSSQL Conforme au moins SQL-92.
  • MySQL Conforme au moins SQL-92.
  • Oracle a obtenu au moins SQL-92.
  • Informix Conforme au moins SQL-92.

Quelque chose d'autre que vous pourriez envisager, si vous utilisez .NET, est d'utiliser le modèle d'usine System.Data.Common qui fait un bon travail d'abstraire spécificités du fournisseur pour un certain nombre de SGBDR.

Si vous essayez de faire un produit qui fonctionne contre plusieurs bases de données, je pense essayer d'utiliser uniquement sql standard n'est pas la voie à suivre, comme d'autres réponses ont indiqué, en raison des différentes « interprétations » de la norme. Au lieu de cela, vous devriez, si possible, avoir une sorte de couche d'accès aux données dans votre application qui a différentes implémentations spécifiques pour chaque base de données. Selon ce que vous essayez de faire, il existe des outils tels que Hibernate qui sera donc beaucoup de la levée de lourdes en ce qui concerne ce pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top