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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » SQL のダイアレクトと互換性 » SQL ダイアレクト

 

Transact-SQL との互換性

SQL Anywhere は、Sybase Adaptive Server Enterprise がサポートする SQL ダイアレクトである Transact-SQL の大部分のサブセットをサポートしています。この項では、SQL Anywhere と Adaptive Server Enterprise 間の SQL の互換性について説明します。

目的

次に、SQL Anywhere の Transact-SQL に対するサポートの目的を示します。

  • アプリケーションの移植性   アプリケーション、ストアド・プロシージャ、バッチ・ファイルの多くは、Adaptive Server Enterprise と SQL Anywhere データベースの両方で使用できるように作成できます。

  • データの移植性   SQL Anywhere データベースと Adaptive Server Enterprise データベースの間では、最小限の作業でデータの交換とレプリケートができます。

目的は、Adaptive Server Enterprise と SQL Anywhere の両方で動作するアプリケーションを作成することです。既存の Adaptive Server Enterprise アプリケーションの多くは、SQL Anywhere データベースで実行するには多少の変更が必要です。

Transact-SQL のサポート方法

次に、SQL Anywhere の Transact-SQL に対するサポート方法を示します。

  • SQL 文の多くは、SQL Anywhere と Adaptive Server Enterprise 間で互換性があります。

  • 特にプロシージャ、トリガ、バッチで使用されるプロシージャ言語で書かれた文のいくつかでは、これまでの SQL Anywhere のバージョンでサポートされる構文とともに、別の Transact-SQL 文がサポートされます。このような文については、SQL Anywhere では 2 種類の SQL ダイアレクトがサポートされています。これらのダイアレクトは Transact-SQL (Adaptive Server Enterprise のダイアレクト) および Watcom-SQL (SQL Anywhere のダイアレクト) と呼ばれています。

  • プロシージャ、トリガ、バッチは Transact-SQL または Watcom-SQL ダイアレクトのどちらでも実行されます。バッチまたはプロシージャ内では、1 つのダイアレクトの制御文だけを通して使用します。たとえば、ダイアレクトごとに異なったフロー制御文があります。

2 つのダイアレクトが重なり合う状況を、次の図に示します。

2 つの円のベン図。2 つの円が重なっていない箇所には、SQL Anywhere と Transact-SQL で構文が異なる CREATE PROCEDURE 文や CREATE TRIGGER 文などが示されています。重なっている箇所には、どちらのサーバでも構文が同じである SELECT、INSERT、UPDATE、DELETE 文などが示されています。
類似点と相違点

SQL Anywhere は、既存のデータを処理するときの Transact-SQL 言語の要素、関数、文のほとんどをサポートします。たとえば SQL Anywhere は、すべての数値関数、集合関数、日付と時刻関数をサポートし、1 つを除くすべての文字列関数をサポートしています。別の例として、ジョインを使う拡張された DELETE 文と UPDATE 文がサポートされます。

さらに、SQL Anywhere では、Transact-SQL のストアド・プロシージャ言語 (CREATE PROCEDURE 文、CREATE TRIGGER 文、制御文など) の大部分と、Transact-SQL データのデータ定義言語文のほとんどがサポートされます。

それぞれの製品にサポートされる構造と設定については設計上の相違点があります。デバイス管理、ユーザ管理、バックアップなどの管理タスクの多くはシステム固有のものです。ここでは、SQL Anywhere は、Transact-SQL のシステム・テーブルをビューとして提供しますが、意味のないテーブルにはローがありません。また、SQL Anywhere は、一般的な管理タスクの一部として一連のシステム・プロシージャを提供します。

この章では、最初に、相違点の多いシステム・レベルの問題を検討します。互換性の高い、ダイアレクトのデータ操作とデータ定義言語については、後で説明します。

Transact-SQL のみ

SQL Anywhere がサポートする SQL 文には、一方のダイアレクトに属し、他方には属さないものがあります。このような 2 つのダイアレクトは、1 つのプロシージャ、トリガ、またはバッチ内で混在させることはできません。たとえば、次の文は SQL Anywhere ではサポートされますが、それは Transact-SQL ダイアレクトのみに属するものとしてです。

  • Transact-SQL 制御文の IF と WHILE

  • Transact-SQL の EXECUTE 文

  • Transact-SQL の CREATE PROCEDURE 文と CREATE TRIGGER 文

  • Transact-SQL の BEGIN TRANSACTION 文

  • セミコロンで区切られていない SQL 文は、Transact-SQL のプロシージャまたはバッチに属しています。

SQL Anywhere のみ

Adaptive Server Enterprise では、次の文をサポートしません。

  • 制御文の CASE、LOOP、FOR

  • IF と WHILE の SQL Anywhere バージョン

  • CALL 文

  • CREATE PROCEDURE 文、CREATE FUNCTION 文、CREATE TRIGGER 文の SQL Anywhere バージョン

  • セミコロンで区切られた SQL 文

注意

1 つのプロシージャ、トリガ、またはバッチ内では、2 つのダイアレクトを混在させることはできません。つまり、ダイアレクトは次の条件で使用できます。

  • Transact-SQL のみの文を、両方のダイアレクトに属する文とともにバッチ、プロシージャ、またはトリガ内に含めることができます。

  • Adaptive Server Enterprise によってサポートされない文を、両サーバによってサポートされる文とともに、バッチ、プロシージャ、またはトリガ内に含めることができます。

  • Transact-SQL のみの文を、SQL Anywhere のみの文とともにバッチ、プロシージャ、またはトリガに含めることはできません。