【问题标题】:Create View with option (maxrecursion)使用选项创建视图 (maxrecursion)
【发布时间】:2023-04-08 22:48:01
【问题描述】:

我想在 SQL 中创建视图,因为 tableau 软件不支持 CTE 功能。我使用 MAXRECURSION 时无法添加视图。错误信息是

关键字“OPTION”附近的语法不正确。

下面是我现有的使用递归的 CTE 查询。

我需要在现有查询中添加哪些内容?

WITH shiftHours AS (
   -- This is a recursive CTE, code removed to improve readability
)

SELECT *
FROM (
  SELECT * from shiftHours
) AS t
    PIVOT (
SUM(hourValue)
FOR hourOrdinal IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23])
) AS pvt
OPTION (MAXRECURSION 0)
GO

【问题讨论】:

  • 你的怎么了?错误?
  • 我当前的查询使用的是 CTE,所以我不确定如何添加视图以便可以将其放入 Tableau!你知道如何添加视图吗? @Yatrix
  • 不幸的是,我认为 OPTION 必须应用于最外层的查询(使用视图的查询),如果您正在使用的软件没有t 喜欢 CTE,我们大概可以猜测它可能有带查询提示的小卡车。
  • 我的意思是,我相信您必须创建视图 而不 指定 OPTION 但是,当您编写查询时 references 视图,您可以将 OPTION 添加到 that 查询中。
  • 我建议你把你的cte放到一个函数中,然后基于函数创建视图。

标签: sql sql-server tsql


【解决方案1】:

虽然您无法创建显式包含 OPTION 子句的 VIEW,但如果您的 CTE 预计会返回 100 多个预期结果,并且希望避免将 OPTION 语句添加到您的 VIEW 调用中,请尝试执行CTE - 包括 OPTION 子句 - 在您的 VIEW 中的 OPENQUERY 语句中。

在您的示例中,它可能看起来像这样:

select * from OPENQUERY([YourDatabaseServer], '
WITH shiftHours AS (
     -- This is a recursive CTE, code removed to improve readability
)

SELECT *
  FROM (
    SELECT * from YourDatabase.YourUser.shiftHours
  ) AS t
  PIVOT (
    SUM(hourValue)
      FOR hourOrdinal IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23])
  ) AS pvt
  OPTION (MAXRECURSION 0)

') x

请注意,您必须完全限定对象引用,即数据库和用户规范必须作为对象(表、视图、存储过程或函数)引用的前缀。

当然,它有点难看,但可以很好地完成工作,并且避免添加讨厌的 OPTION 子句。

【讨论】:

    【解决方案2】:

    OPTION 每个查询只能使用一次。 您必须在使用您的视图的查询中使用 OPTION。

    【讨论】:

      【解决方案3】:
      Create View [dbo].[YourViewname] as
      //Your CTE
      go
      

      这不应该有任何挑战。你有遇到吗?

      【讨论】:

      • ** 关键字“OPTION”附近的语法不正确。 ** 这是错误信息
      • 我认为这是由于 MAXRECURSION
      猜你喜欢
      • 2021-04-07
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多