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

问题描述 投票:4回答:2

我注意到Sybase SQL Anywhere支持它们,但是在ASE上也找不到任何关于ASE的文档。

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

common-table-expression sybase-ase
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

有关更多信息,请查看qazxsw poi!


-2
投票
  1. 自1984年以来,标准和Sybase允许完全递归。我们通常在存储过程中执行递归,以便控制深度,避免无限循环,并且执行比未编译的SQL等更快。 存储过程对递归,结果集构造等没有限制。当然,将括号的内容定义为View会使它再次变快(毕竟这是一个真实的视图,而不是我们每次需要时必须实现的视图它)。 重点是,如果你习惯了这个方法(服务器中的递归,一个为递归编码的proc),就像我一样,不需要CTE,它的新语法;未编译的速度;临时表;工作台;光标“行走”层次结构;一切都导致了可怕的表现。 递归proc只读取数据,只读取数据,只读取那些在递归的每个级别都有资格的行。它不使用游标。它没有“行走”,它构建了层次结构。
  2. 第二种选择是使用动态SQL。只需构建SELECT,每个层次结构一个,并继续添加UNION,直到用完级别为止;然后执行。

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

© www.soinside.com 2019 - 2024. All rights reserved.