为什么我不能在T-SQL中的子表达式上使用.nodes()?

时间:2015-11-24 22:41:28

标签: sql-server xml tsql nodes

我觉得我在这里遗漏了一些基本而明显的东西,但我不能为我的生活找到它。

考虑这个T-SQL:

declare @tab table (a int, b int);
insert into @tab values (1, 2), (3, 4), (5, 6);
select * from @tab for xml raw, type;

declare @xml xml = (select * from @tab for xml raw, type);
select c.value('@a', 'int') a, c.value('@b', 'int') b
from @xml.nodes('row') t(c);

select c.value('@a', 'int') a, c.value('@b', 'int') b
from (select * from @tab for xml raw, type).nodes('row') t(c);

它创建一个表变量,为其提供一些数据,然后SELECTFOR XML RAW, TYPE。到目前为止,非常好。

接下来,它声明一个XML变量,并将相同查询的输出放入其中。然后它查询该变量以再次返回原始表。仍然没问题。

最后一行尝试做同样的事情,但跳过了必须声明和填充变量的额外步骤。没有骰子 - 解析器抱怨这是一个语法错误。我尝试了各种额外的括号和SELECT以及诸如此类的东西,但无济于事。

怎么样?有什么方法可以做到这一点?

我知道当有人告诉我时,我会感到愚蠢......

0 个答案:

没有答案