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. 第二种选择是使用动态 SQL。只需构造 SELECT,层次结构的每一级一个,然后继续添加 UNION,直到用完所有级别;然后执行。

可以使用函数来提供 CTE 的功能,但不要这样做。函数旨在用于不同的、面向列的目的,代码受这些约束。它是标量的,适用于构造列值。存储过程和 CTE 是面向行的。

于 2011-01-28T02:37:41.630 回答