Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » SQL-Dialekte und Kompatibilität » SQL-Dialekte » Kompatible SQL-Anweisungen schreiben

 

Kompatible Abfragen schreiben

Es gibt zwei Kriterien für das Schreiben einer Abfrage, die für Datenbanken sowohl in SQL Anywhere als auch in Adaptive Server Enterprise ausgeführt werden kann:

  • Datentypen, Ausdrücke und Suchbedingungen in der Abfrage müssen kompatibel sein.

  • Die Syntax der SELECT-Anweisung selbst muss kompatibel sein.

In diesem Abschnitt wird die kompatible SELECT-Anweisungssyntax erklärt. Es werden kompatible Datentypen, Ausdrücke und Suchbedingungen vorausgesetzt. Die Beispiele setzen voraus, dass die Einstellung "quoted_identifier" auf "Off" gesetzt ist: Das ist die Standardeinstellung in Adaptive Server Enterprise, aber nicht die Standardeinstellung in SQL Anywhere.

Die folgende Teilmenge der Transact-SQL SELECT-Anweisung wird in SQL Anywhere unterstützt:

Syntax
SELECT [ ALL | DISTINCT ] Auswahlliste
...[ INTO #Name_temporäre_Tabelle ]
...[ FROM Tabellenspezifikation [ HOLDLOCK | NOHOLDLOCK ],
...  Tabellenspezifikation [ HOLDLOCK | NOHOLDLOCK ], ... ]
...[ WHERE Suchbedingung ]
...[ GROUP BY Spaltenname, ... ]
...[ HAVING Suchbedingung ]
   [ ORDER BY { Ausdruck | Ganzzahl }
      [ ASC | DESC ], ... ]
Parameter
Auswahlliste:
 Tabellenname.*
|  *
| Ausdruck
| Aliasname = Ausdruck
| Ausdruck Bezeichner, ID  
| Ausdruck Zeichenfolge
Tabellenspezifikation:
[ Eigentümer. ]Tabellenname
...[ [ AS ] Korrelationsname ]
 ...[ ( INDEX Indexname [ PREFETCH Größe  ][ LRU | MRU ] ) ]
Aliasname:
Bezeichner, ID | 'Zeichenfolge' | "Zeichenfolge"

Die folgenden Schlüsselwörter und Klauseln der Transact-SQL SELECT-Anweisungssyntax werden von SQL Anywhere nicht unterstützt:

Hinweise
  • SQL Anywhere unterstützt die Transact-SQL-Erweiterung der GROUP BY-Klausel nicht, sodass Bezugnahmen auf Spalten und Ausdrücke, die nicht für die Erstellung von Gruppen verwendet werden, möglich sind. In Adaptive Server Enterprise erzeugt diese Erweiterung zusammenfassende Berichte.

  • Der Performance-Parameter-Teil der Tabellen-Spezifikation wird syntaktisch analysiert, hat jedoch keine Auswirkungen.

  • Das Schlüsselwort HOLDLOCK wird von SQL Anywhere unterstützt. Mit HOLDLOCK ist eine gemeinsame Sperre auf einer angegebenen Tabelle oder Ansicht restriktiver, weil die gemeinsame Sperre nicht freigegeben wird, wenn die Datenseite nicht mehr benötigt wird. Für den Gebrauch der Tabelle, für die HOLDLOCK angegeben wurde, wird die Abfrage auf Isolationsstufe 3 ausgeführt.

  • Die Option HOLDLOCK gilt nur für die Tabelle oder Ansicht, für die sie angegeben ist, und nur für die Dauer der Transaktion, die durch die Anweisung, in der sie verwendet wird, definiert ist. Bei einer Isolationsstufe 3 wird ein Sperrenbesitz für jedes SELECT innerhalb einer Transaktion angewendet. Sie können in einer Abfrage nicht die beiden Optionen HOLDLOCK und NOHOLDLOCK gleichzeitig verwenden.

  • Das Schlüsselwort NOHOLDLOCK wird von SQL Anywhere erkannt, hat jedoch keine Auswirkungen.

  • Transact-SQL verwendet die SELECT-Anweisung, um lokalen Variablen Werte zuzuordnen:

    SELECT @localvar = 42;

    Die entsprechende Anweisung in SQL Anywhere ist die SET-Anweisung:

    SET @localvar = 42;
  • Adaptive Server Enterprise unterstützt nicht die folgenden Klauseln der SELECT-Anweisungs-Syntax:

    • INTO Hostvariablenliste
    • INTO Variablenliste
    • Abfragen in Klammern
  • Adaptive Server Enterprise verwendet Join-Operatoren in der WHERE-Klausel statt der FROM-Klausel und der ON-Bedingung für Joins.

Siehe auch