Frage

Ich möchte einige Abfragen schreiben, die fast alle ohne SQLExceptions die Datenbanken arbeiten können. Also, wo kann ich die ANSI-Standards erhalten, um die Abfragen zu schreiben?

War es hilfreich?

Lösung

nicht sicher, dass Ihnen helfen werden.

Vendors sind berühren und so weit wie die Umsetzung der Standards gehen und oft die Standards selbst sind ungenau genug, so dass Sie nie eine Abfrage schreiben konnten, die mit allen Implementierer funktionieren würden.

Zum Beispiel SQL 92 definiert der Verkettungsoperator als || aber weder MySQL noch MSSQL verwenden diese (Oracle tut). Herstellerunabhängige String-Verkettung ist nicht möglich.

In ähnlicher Weise ein Standard-Escape-Zeichen wird so nicht angegeben, wie Sie diese möglicherweise nicht in allen Anbietern behandelt.

Having said that:

Andere Tipps

wikipedia :

Der SQL-Standard ist nicht frei verfügbar. Der gesamte Standard kann von der ISO als ISO / IEC 9075 (1-4,9-11,13,14) erworben werden: 2008.

Dennoch würde ich Ihnen nicht raten, diese Strategie zu folgen, da keine Datenbank-Engine eine beliebige SQL-Standard folgt (99 SQL 2003, etc.) auf das Schreiben. Alle von ihnen nehmen Freiheiten in der Art, wie sie Anweisungen behandeln oder Variablen definieren (zB wenn zwei Strings verschiedener Motoren Griff Groß- und Kleinschreibung unterschiedlich zu vergleichen). Ein Verfahren, das sehr effizient mit einem Motor ist, kann ineffizient für eine anderen schrecklich sein.

Ein Vorschlag wäre, eine Standardgruppe von Abfragen zu entwickeln und zu unterschiedlichen Klassen zu entwickeln, die die konkreten Umsetzung dieser Abfrage für einen bestimmten Ziel-RDBMS enthalten.

Hope this half

Überprüfen Sie die BNF des Kerns SQL aus Grammatiken finden Sie unter http://savage.net.au/SQL /

Dies ist ein Teil der Antwort - den Rest, Wie von Kiranu und MattMitchell, ist, dass verschiedene Anbieter unterschiedlich die Standard implementieren. Kein DBMS haftet perfekt auch SQL-92, obwohl die meisten sind ziemlich nah dran.

Eine Beobachtung: Der SQL-Standard sagt nichts über Indizes - so gibt es keine Standard-Syntax ist ein Index für die Erstellung. Er sagt auch nichts darüber, wie eine Datenbank zu erstellen; jeder Hersteller hat seine eigenen Mechanismen für das zu tun.

Der SQL-92-Standard ist wahrscheinlich die man möchte Sie zielen. Ich glaube, es die meisten der großen RDBMS unterstützt wird.

Hier ist ein weniger prägnanter Link . Beispielinhalt:

  • PostgreSQL bietet einen Blick. Breaks Standard, indem sie keine Updates zu Ansichten ...
  • DB2 Konform mindestens SQL-92.
  • MSSQL Konform mindestens SQL-92.
  • MySQL Konform mindestens SQL-92.
  • Oracle Konform mindestens SQL-92.
  • Informix Konform mindestens SQL-92.

Etwas anderes könnten Sie, wenn Sie .NET verwenden, ist die Fabrikmuster in System.Data.Common , die zu abstrahieren Anbieter Besonderheiten für eine Reihe von RDBMS macht einen guten Job.

Wenn Sie ein Produkt zu machen versuchen, die gegen mehrere Datenbanken arbeiten werde ich nur denken versuchen, SQL-Standard zu verwenden, ist nicht der Weg zu gehen, wie andere Antworten angegeben haben, aufgrund der unterschiedlichen Interpretationen "des Standards. Stattdessen sollten Sie, wenn möglich, eine Art von Datenzugriffsschicht in Ihrer Anwendung haben, die für jede Datenbank unterschiedliche Implementierungen spezifisch hat. Je nachdem, was Sie versuchen zu tun, gibt es Tools wie Hibernate denen so viel schweres Heben in Bezug auf das für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top