SQL Anywhere と Adaptive Server Enterprise の両方のデータベースで実行されるクエリの記述方法には、基準が 2 つあります。
クエリ中のデータ型、式、探索条件が互換性を持つこと。
SELECT 文そのものの構文が互換性を持つこと。
この項では、クエリ中のデータ型、式、探索条件が互換性を持つことを前提に、SELECT 文の構文の互換性について説明します。quoted_identifier 設定値が Off であり、それが Adaptive Server Enterprise のデフォルトの設定値であって、SQL Anywhere のデフォルトの設定値ではない、という例を想定します。
SQL Anywhere がサポートする、Transact-SQL SELECT 文のサブセットを次に示します。
SELECT [ ALL | DISTINCT ] select-list ...[ INTO #temporary-table-name ] ...[ FROM table-spec [ HOLDLOCK | NOHOLDLOCK ], ... table-spec [ HOLDLOCK | NOHOLDLOCK ], ... ] ...[ WHERE search-condition ] ...[ GROUP BY column-name, ... ] ...[ HAVING search-condition ] [ ORDER BY { expression | integer } [ ASC | DESC ], ... ]
select-list:
table-name.*
| *
| expression
| alias-name = expression
| expression as identifier
| expression as string
table-spec: [ owner . ]table-name ...[ [ AS ] correlation-name ] ...[ ( INDEX index_name [ PREFETCH size ][ LRU | MRU ] ) ]
alias-name: identifier | 'string' | "string"
SQL Anywhere は、次に示す Transact-SQL SELECT 構文のキーワードと句をサポートしません。
SQL Anywhere は、グループ作成に使用されないカラムと式の参照を可能にする GROUP BY 句への Transact-SQL 拡張をサポートしません。Adaptive Server Enterprise では、この拡張はサマリレポートを生成します。
テーブル仕様のパフォーマンス・パラメータ部分は解析されますが、効果はありません。
HOLDLOCK キーワードは SQL Anywhere によってサポートされます。HOLDLOCK の場合、データ・ページが不要になっても共有ロックが解放されないため、指定されたテーブルやビューの共有ロックの制限はより厳しくなります。HOLDLOCK が指定されているテーブルのために、クエリは独立性レベル 3 で実行されます。
HOLDLOCK オプションは、それが指定されたテーブルまたはビューにだけ、しかも、そのオプションが使用された文で定義されたトランザクションの間だけ適用されます。独立性レベルを 3 に設定すると、トランザクション内の各 SELECT に適用されます。1 つのクエリの中で HOLDLOCK と NOHOLDLOCK の両方のオプションは指定できません。
NOHOLDLOCK キーワードは、SQL Anywhere によって認識されますが、効果はありません。
Transact-SQL は SELECT 文を使用してローカル変数に値を割り当てます。
SELECT @localvar = 42; |
SQL Anywhere でこれに対応する文は、SET 文です。
SET @localvar = 42; |
Adaptive Server Enterprise は、次に示す SELECT 構文の句をサポートしません。
Adaptive Server Enterprise は、ジョイン用の FROM 句と ON 条件ではなく、WHERE 句でジョイン演算子を使用します。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |