在 SQL Server 中结合 CTE“WITH”和“WITH XMLNAMESPACES....”
Posted
技术标签:
【中文标题】在 SQL Server 中结合 CTE“WITH”和“WITH XMLNAMESPACES....”【英文标题】:Combine CTE "WITH" and a "WITH XMLNAMESPACES...." in SQL Server 【发布时间】: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 行 ')' 附近的语法不正确。
那么我到底该怎么做呢?
【问题讨论】:
【参考方案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
。以上是关于在 SQL Server 中结合 CTE“WITH”和“WITH XMLNAMESPACES....”的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER里面的with语句有啥作用?用过的师兄请帮忙