40

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

似乎这两个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 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、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 行
关键字“WITH”附近的语法不正确。
消息 319,级别 15,状态 1,第 4 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。
消息 102,级别 15,状态 1,第 21 行
')' 附近的语法不正确。

那么我该怎么做呢?

4

1 回答 1

60

使用逗号而不是第二个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块只需使用逗号而不是关键字。

于 2010-09-10T14:09:31.690 回答