将查询保存为视图获取错误

时间:2013-06-24 12:11:17

标签: sql sql-server sql-server-2008

我有这个查询运行正常,没有问题!

SELECT [Q].sHost
    , LEFT([Q].sDescription, Len([Q].sDescription) - 1) AS [sDescription]
FROM (

    SELECT DISTINCT [Q2].sHost
        , (
            SELECT CONVERT(NVARCHAR(MAX), [Q1].[sDescription]) + N', ' AS [text()]
            FROM (
                SELECT (
                        CASE 
                            WHEN (CHARINDEX('\', [sInstance]) = 0)
                                THEN [sInstance]
                            ELSE substring([sInstance], 0, CHARINDEX('\', [sInstance]))
                            END
                        ) AS sHost
                    , [sDescription]
                FROM [db_group].[dbo].[instanceCommentsList]
                ) AS [Q1]
            WHERE ([Q1].sHost = [Q2].sHost)
            FOR XML PATH('')
            ) [sDescription]
    FROM (
        SELECT (
                CASE 
                    WHEN (CHARINDEX('\', [sInstance]) = 0)
                        THEN [sInstance]
                    ELSE substring([sInstance], 0, CHARINDEX('\', [sInstance]))
                    END
                ) AS sHost
            , [sDescription]
        FROM [db_group].[dbo].[instanceCommentsList]
        ) AS [Q2]
    ) AS [Q]

当我将此查询保存为视图时,出现以下错误

  

'('。

附近的WHERE子句出错      

'='附近的WHERE子句出错。无法

     

解析查询文本。

不确定问题出在哪里!

它以任何方式保存并且它有点工作,我可以在一个简单的选择查询中使用它,但我在视图名称下面得到一条红线,当我把鼠标放在上面时,我得到了这条消息

  

对象名称无效....

如果我在更复杂的查询中使用它,它根本不起作用

编辑:----------------------------------

通过 SelectDistinct 的评论

后阅读Cannot get FOR XML PATH to work

我修复了它但仍然有一个错误!

  

'('。

附近的WHERE子句出错      

无法解析查询文本。

这是固定代码:

SELECT [Q].sHost
    , LEFT([Q].sDescription, Len([Q].sDescription) - 1) AS [sDescription]
FROM (

    SELECT DISTINCT [Q2].sHost
        , (
            SELECT CONVERT(VARCHAR(MAX), [Q1].[sDescription]) + ', ' AS [text()]
            FROM (
                SELECT (
                        CASE 
                            WHEN (CHARINDEX('\', [sInstance]) = 0)
                                THEN [sInstance]
                            ELSE substring([sInstance], 0, CHARINDEX('\', [sInstance]))
                            END
                        ) AS sHost
                    , [sDescription]
                FROM [db_group].[dbo].[instanceCommentsList]
                ) AS [Q1]
            WHERE ([Q1].sHost = [Q2].sHost)
            FOR XML PATH(''), type
       ).value('.', 'varchar(max)') as [sDescription]
    FROM (
        SELECT (
                CASE 
                    WHEN (CHARINDEX('\', [sInstance]) = 0)
                        THEN [sInstance]
                    ELSE substring([sInstance], 0, CHARINDEX('\', [sInstance]))
                    END
                ) AS sHost
            , [sDescription]
        FROM [db_group].[dbo].[instanceCommentsList]
        ) AS [Q2]
    ) AS [Q]

1 个答案:

答案 0 :(得分:0)

尝试WHERE [Q1] .sHost = [Q2] .sHost而不是WHERE([Q1] .sHost = [Q2] .sHost)。