【问题标题】:Combine CTE "WITH" and a "WITH XMLNAMESPACES...." in SQL Server在 SQL Server 中结合 CTE“WITH”和“WITH XMLNAMESPACES....”
【发布时间】:2011-04-10 18:04:58
【问题描述】:

有没有人设法在 SQL Server 的 T-SQL 中创建一个 CTE,其中还包含 WITH XMLNAMESPACES 声明?

似乎WITH 两个关键字都坚持要成为“T-SQL 批处理中的第一个”,但这并没有真正起作用....

我试过了:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
WITH CTEQuery AS
(
SELECT (list of fields)
    FROM dbo.MyTable
    WHERE (conditions)
)
SELECT * FROM CTEQuery

没用 :-((语法错误)

消息 156,第 15 级,状态 1,第 2 行
关键字“WITH”附近的语法不正确。
消息 319,第 15 级,状态 1,第 2 行
附近的语法不正确 关键字“与”。如果这个语句是 公用表表达式,一个 xmlnamespaces 子句或更改 跟踪上下文子句,前一个 语句必须以 分号。

所以我尝试在第二个 WITH 前面加上分号:

WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
;WITH CTEQuery AS
(
SELECT (list of fields)
    FROM dbo.MyTable
    WHERE (conditions)
)
SELECT * FROM CTEQuery

得到了这个:

消息 102,第 15 级,状态 1,第 2 行
';' 附近的语法不正确。

然后我尝试将WITH XMLNAMESPACES 放入 CTE:

WITH CTEQuery AS
(
   WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
   SELECT (list of fields)
      FROM dbo.MyTable
      WHERE (conditions)
)
SELECT * FROM CTEQuery

得到了这个:

消息 156,第 15 级,状态 1,第 4 行
关键字附近的语法不正确 '与'。
消息 319,第 15 级,状态 1,第 4 行
附近的语法不正确 关键字“与”。如果这个语句是 公用表表达式,一个 xmlnamespaces 子句或更改 跟踪上下文子句,前一个 语句必须以 分号。
消息 102,第 15 级,状态 1,第 21 行
')' 附近的语法不正确。

那么我到底该怎么做呢?

【问题讨论】:

    标签: sql-server common-table-expression


    【解决方案1】:

    使用逗号代替第二个WITH,例如

    WITH XMLNAMESPACES('http://schemas.myself.com/SomeSchema' as ns)
    ,CTEQuery AS
    (
    SELECT (list of fields)
        FROM dbo.MyTable
        WHERE (conditions)
    )
    SELECT * FROM CTEQuery
    

    如果您想要多个 CTE 表达式,则相同。您只需指定一次WITH,然后所有其他WITH 块只需使用逗号而不是关键字。

    【讨论】:

    • 并且必须先定义XMLNAMESPACES,然后再定义任何CTEs
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2021-08-11
    • 2011-01-31
    相关资源
    最近更新 更多