带有cte Won的SQL视图';救不了
我正在使用Microsoft SQL Server Management Studio 2008,在创建视图时遇到问题。我有以下代码:带有cte Won的SQL视图';救不了,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用Microsoft SQL Server Management Studio 2008,在创建视图时遇到问题。我有以下代码: ;WITH cteSample AS ( SELECT vw_JobCosting_WIPMasterSub.SJob , vw_JobCosting_WIPMasterSub.MJob
;WITH
cteSample
AS (
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, vw_JobCosting_WIPMasterSub.MJob DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, 0 AS LVL
FROM vw_JobCosting_WIPMasterSub
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'True'
UNION ALL
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, CASE S.LVL
WHEN 0 THEN S.SJob
ELSE S.DisplayMJob
END AS DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, S.LVL + 1
FROM cteSample S
INNER JOIN vw_JobCosting_WIPMasterSub
ON S.SJob = vw_JobCosting_WIPMasterSub.MJob
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'False'
)
SELECT
cteSample.SJob
, cteSample.DisplayMJob MJob
, cteSample.GroupF
FROM cteSample
ORDER BY
cteSample.LVL
, cteSample.MJob
, cteSample.SJob
此代码作为查询执行良好。当我作为视图执行时,我会收到以下消息:
“无法分析查询文本”
当我确定代码执行良好。尝试保存时,出现以下错误,无法保存:
“;”附近的语法不正确”
非常感谢您的帮助。您应该能够使用视图定义中的
和创建视图。只需拆下分隔符
(您无论如何都不需要它,因为WITH
是您的第一条也是唯一一条语句)和orderby
(您应该在使用视图时进行排序):
您的语句中没有create view
,但听起来好像您被语句终止符的用法弄糊涂了代码>。它需要在结尾,而不是在with
语句之前。根据一般经验,视图不应包含ORDER BY子句@a_horse_with_no_name;当CTE前的陈述没有明确的内容时,before WITH是一种常见的做法,以避免混淆;这就是造成语法错误的原因error@YuriyGalanter:是的。但是在前面使用是非法的,如果这是创建视图的一部分。与其将语句终止符放在带有
的前面,不如始终将其放在所有语句的末尾(这个问题显示了这种习惯有多么令人困惑——似乎user2849560假设关键字实际上是“called”;WITH
,而不是WITH
)可以完美地工作。非常感谢。
CREATE VIEW yourView AS
WITH
cteSample
AS (
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, vw_JobCosting_WIPMasterSub.MJob DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, 0 AS LVL
FROM vw_JobCosting_WIPMasterSub
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'True'
UNION ALL
SELECT
vw_JobCosting_WIPMasterSub.SJob
, vw_JobCosting_WIPMasterSub.MJob
, CASE S.LVL
WHEN 0 THEN S.SJob
ELSE S.DisplayMJob
END AS DisplayMJob
, vw_JobCosting_WIPMasterSub.GroupF
, S.LVL + 1
FROM cteSample S
INNER JOIN vw_JobCosting_WIPMasterSub
ON S.SJob = vw_JobCosting_WIPMasterSub.MJob
WHERE vw_JobCosting_WIPMasterSub.GroupF = 'False'
)
SELECT
cteSample.SJob
, cteSample.DisplayMJob MJob
, cteSample.GroupF
FROM cteSample