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

 

Transact-SQL-Kompatibilität

SQL Anywhere unterstützt eine große Untergruppe von Transact-SQL, einem SQL-Dialekt, der von Sybase Adaptive Server Enterprise unterstützt wird. In diesem Abschnitt wird die SQL-Kompatibilität zwischen SQL Anywhere und Adaptive Server Enterprise beschrieben.

Ziele

Die Transact-SQL-Unterstützung in SQL Anywhere hat folgenden Zweck:

  • Anwendungsportierbarkeit   Viele Anwendungen, gespeicherte Prozeduren und Batchdateien können so geschrieben werden, dass sie sowohl in Adaptive Server Enterprise- als auch in SQL Anywhere-Datenbanken verwendet werden können.

  • Datenportierbarkeit   SQL Anywhere- und Adaptive Server Enterprise-Datenbanken können mit wenig Aufwand Daten untereinander austauschen und replizieren.

Ziel ist es, Anwendungen zu schreiben, die sowohl mit Adaptive Server Enterprise als auch mit SQL Anywhere arbeiten. Bestehende Adaptive Server Enterprise-Anwendungen erfordern im Allgemeinen einige Änderungen, damit sie in einer SQL Anywhere-Datenbank laufen können.

Wie Transact-SQL unterstützt wird

Die Transact-SQL-Unterstützung in SQL Anywhere hat die folgende Form:

  • Viele SQL-Anweisungen sind zwischen SQL Anywhere und Adaptive Server Enterprise kompatibel.

  • Für einige Anweisungen, insbesondere in der in Prozeduren, Triggern und Batches verwendeten Prozedursprache, wird zusätzlich zur Syntax, die von Vorgängerversionen von SQL Anywhere unterstützt wird, eine separate Transact-SQL-Anweisung unterstützt. Bei diesen Anweisungen unterstützt SQL Anywhere zwei Dialekte von SQL. Diese Dialekte werden Transact-SQL (der Dialekt von Adaptive Server Enterprise), und Watcom-SQL (der Dialekt von SQL Anywhere) genannt.

  • Eine Prozedur, ein Trigger oder ein Batch werden entweder im Transact-SQL- oder im Watcom-SQL-Dialekt ausgeführt. Sie dürfen innerhalb des Batches oder der Prozedur nur Steueranweisungen eines der beiden Dialekte verwenden. Jeder Dialekt hat beispielsweise verschiedene Steueranweisungen.

Das folgende Diagramm veranschaulicht, wie sich die beiden Dialekte überlappen.

Ein Venn-Diagramm aus zwei Kreisen. Die nicht überpappenden Teile der zwei Kreise zeigen Anweisungen wie CREATE PROCEDURE und CREATE TRIGGER, die verschiedene Syntax in SQL Anywhere und Transact-SQL haben. Die überlappenden Bereiche zeigen Anweisungen, die auf beiden Servern gleich sind, wie SELECT, INSERT, UPDATE und DELETE.
Ähnlichkeiten und Unterschiede

SQL Anywhere unterstützt einen großen Anteil der Sprachelemente, Funktionen und Anweisungen in Transact-SQL, um vorhandene Daten zu verarbeiten. SQL Anywhere unterstützt beispielsweise alle nummerischen, Aggregat- und Datums- bzw. Uhrzeitfunktionen sowie alle Zeichenfolgenfunktionen (bis auf eine). Außerdem unterstützt SQL Anywhere erweiterte DELETE- und UPDATE-Anweisungen, die Joins verwenden.

Weiterhin unterstützt SQL Anywhere auch einen großen Anteil der Transact-SQL Stored Procedure-Sprache (CREATE PROCEDURE- und CREATE TRIGGER-Syntax, Steueranweisungen, usw.) sowie viele, wenn auch nicht alle, Aspekte der Anweisungen für die Datendefinitionssprache in Transact-SQL.

Es bestehen Unterschiede im Entwurf der architektonischen und Konfigurationseinrichtungen, die von jedem Produkt unterstützt werden. Deviceverwaltung, Benutzerverwaltung und Wartungstasks, wie z.B. Sicherungen, sind eher systemspezifisch. Sogar hier stehen in SQL Anywhere Transact-SQL-Systemtabellen als Ansichten zur Verfügung, wenn die Tabellen, die in SQL Anywhere bedeutungslos sind, keine Zeilen haben. Außerdem bietet SQL Anywhere eine Reihe von Systemprozeduren für einige der gewöhnlicheren Administrationsaufgaben.

Dieses Kapitel befasst sich zuerst mit einigen Aspekten auf Systemebene, bei denen die Unterschiede am deutlichsten sind, und erläutert dann Sprachaspekte der Datenmanipulation und Datendefinition der Dialekte, bei denen eine hohe Kompatibilität vorliegt.

Gilt nur für Transact-SQL

Es gibt SQL-Anweisungen, die von SQL Anywhere unterstützt werden und lediglich Teil des einen und nicht des anderen Dialekts sind. Die beiden Dialekte können innerhalb einer Prozedur, eines Triggers oder eines Batches nicht gemischt werden. SQL Anywhere unterstützt z.B. die folgenden Anweisungen, jedoch nur als Teil des Transact-SQL-Dialekts:

  • Transact-SQL-Steueranweisungen IF und WHILE

  • Transact-SQL-Anweisung EXECUTE

  • Transact-SQL-Anweisungen CREATE PROCEDURE und CREATE TRIGGER

  • Transact-SQL-Anweisung BEGIN TRANSACTION

  • SQL-Anweisungen, die nicht durch Semikolons getrennt werden, sind Teil einer Transact-SQL-Prozedur oder eines Transact-SQL-Batches.

Nur SQL Anywhere

Adaptive Server Enterprise unterstützt nicht die folgenden Anweisungen:

  • Steueranweisungen CASE, LOOP und FOR

  • SQL Anywhere-Versionen von IF und WHILE

  • CALL-Anweisung

  • SQL Anywhere-Versionen der Anweisungen CREATE PROCEDURE, CREATE FUNCTION und CREATE TRIGGER

  • SQL-Anweisungen, getrennt durch Semikolons

Hinweise

Die beiden Dialekte können nicht innerhalb einer Prozedur, eines Triggers oder eines Batches gemischt werden. Das bedeutet:

  • Sie können für Transact-SQL geltende Anweisungen in einem Batch, einer Prozedur oder einem Trigger mit Anweisungen kombinieren, die Teil beider Dialekte sind.

  • Sie können von Adaptive Server Enterprise nicht unterstützte Anweisungen zusammen mit Anweisungen, die von beiden Servern unterstützt werden, in einem Batch, einer Prozedur oder einem Trigger verwenden.

  • Sie können nur für Transact-SQL geltende Anweisungen nicht zusammen mit nur für SQL Anywhere geltenden Anweisungen in einem Batch, einer Prozedur oder einem Trigger verwenden.