有没有人设法在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
不起作用:-((语法错误)
Msg 156,Level 15,State 1,Line 2
关键字“WITH”附近的语法不正确。
消息319,级别15,状态1,行2 附近的语法不正确 关键字'with'。如果这个陈述是 公用表表达式, xmlnamespaces子句或更改 跟踪上下文子句,前一个 声明必须以a终止 分号。
所以我尝试用分号前面加上第二个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
得到了这个:
Msg 102,Level 15,State 1,Line 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
得到了这个:
Msg 156,Level 15,State 1,Line 4
关键字附近的语法不正确 '用'。
消息319,级别15,状态1,行4 附近的语法不正确 关键字'with'。如果这个陈述是 公用表表达式, xmlnamespaces子句或更改 跟踪上下文子句,前一个 声明必须以a终止 分号。
Msg 102,Level 15,State 1,Line 21
')'附近的语法不正确。
那我该怎么办?
答案 0 :(得分:48)
使用逗号代替第二个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
块只使用逗号而不是关键字。