Sybase ASE 12.5是否支持公用表表达式?

时间:2011-01-26 10:39:27

标签: common-table-expression sybase-ase

我注意到Sybase SQL Anywhere支持它们,但是无法找到有关ASE的任何文档。

如果没有,那么设计递归查询的最佳选择是什么?在SQL Server 2008中,我会使用CTE进行此操作,但如果这不可用?也许是一个功能?

2 个答案:

答案 0 :(得分: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

如需更多信息,请查看this

答案 1 :(得分:-2)

  1. 自1984年以来,标准和Sybase允许完全递归。我们通常在存储过程中执行递归,以便控制深度,避免无限循环,并且执行比未编译的SQL等更快。

    存储过程对递归,结果集构造等没有限制。当然,将括号内容定义为View会使它再次变快(毕竟它是一个真实的视图,而不是我们必须实现的每个视图我们需要它的时间)。

    重点是,如果你习惯了这个方法(服务器中的递归,一个为递归编码的proc),就像我一样,不需要CTE,它的新语法;未编译的速度;临时表;工作台;光标“行走”层次结构;所有这些都导致可怕的表现

    递归proc只读取数据,只读取数据,并只读取那些在递归的每个级别限定的行。它不使用游标。它不会“行走”,而是构建层次结构。

  2. 第二个选项是使用动态SQL。只需构建SELECT,每个层次结构一个,并继续添加UNION,直到用完级别为止;然后执行。

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