4

私は、Sybase SQL Anywhere がそれらをサポートしていることに注意しましたが、ASE についてもサポートしているドキュメントを見つけることができません。

そうでない場合、再帰クエリを設計するための最良の選択肢は何ですか? SQL Server 2008 では、CTE を使用しますが、それが利用できない場合は? おそらく機能?

4

2 に答える 2

0

Sybase ASE 12.5 (および 15.0) は CTE をサポートしていません。


内部クエリを使用して問題を解決できます。

このような単純な CTE:

WITH Sales_CTE (Folders_Id)
AS
-- Define the CTE query.
(
    SELECT Folders_Id FROM Folders
)
SELECT Folders_Id FROM Sales_CTE

これと同じです:

SELECT aux.Folders_Id
FROM (SELECT Folders_Id FROM Folders) aux

もう少し詳しく知りたい方はこちらをチェック!

于 2012-06-14T16:45:18.650 に答える
-3
  1. 1984 年以降、標準と Sybase は完全な再帰を許可しました。通常、ストアド プロシージャで再帰を実行するため、深さが制御され、無限ループが回避され、コンパイルされていない SQL よりも実行が高速になります。

    ストアド プロシージャには、再帰、結果セットの構築などに制限はありません。もちろん、ブラケットの内容をビューとして定義すると、さらに高速になります (これは実際のビューであり、必要なたびにマテリアライズする必要があるビューではありません)。それ)。

    ポイントは、このメソッド (サーバーでの再帰、再帰用にコード化された proc) に慣れている場合、私のように、新しい構文の CTE は必要ありません。コンパイルされていない速度; 一時テーブル; 作業台; 階層を「歩く」カーソル。すべてが恐ろしいパフォーマンスをもたらします。

    再帰プロシージャは、データのみを読み取り、データ以外は何も読み取らず、再帰の各レベルで条件を満たす行のみを読み取ります。カーソルは使用しません。「歩く」のではなく、階層を構築します。

  2. 2 番目のオプションは、動的 SQL を使用することです。階層のレベルごとに 1 つの SELECT を作成し、レベルがなくなるまで UNION を追加し続けます。次に実行します。

関数を使用して CTE の機能を提供できますが、そうしないでください。関数は、別の列指向の目的を意図しており、コードはそれらの制約を受けます。これはスカラーであり、列の値を構築するのに適しています。ストアド プロシージャと CTE は行指向です。

于 2011-01-28T02:37:41.630 に答える