Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有cte Won的SQL视图';救不了_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

带有cte Won的SQL视图';救不了

带有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

我正在使用Microsoft SQL Server Management Studio 2008,在创建视图时遇到问题。我有以下代码:

;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