使用选项创建视图(maxrecursion)

时间:2016-05-06 03:41:24

标签: sql sql-server tsql

我想在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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

虽然您无法创建明确包含OPTION子句的VIEW,但如果您的CTE预计会返回超过100个预期结果,并且希望避免必须将OPTION语句添加到在您的VIEW调用中,尝试在VIEW中的OPENQUERY语句中执行CTE(包括OPTION子句)。

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

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

请注意,您必须完全限定对象引用,即数据库和用户规范必须在对象(table,view,sproc或function)引用前添加前缀。

当然,它有点难看,但很好地完成了工作,并且避免了必须添加那个讨厌的OPTION条款。

答案 2 :(得分:-3)

Create View [dbo].[YourViewname] as
//Your CTE
go

这不应该有任何挑战。你面对任何人吗?