我觉得我在这里遗漏了一些基本而明显的东西,但我不能为我的生活找到它。
考虑这个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);
它创建一个表变量,为其提供一些数据,然后SELECT
为FOR XML RAW, TYPE
。到目前为止,非常好。
接下来,它声明一个XML变量,并将相同查询的输出放入其中。然后它查询该变量以再次返回原始表。仍然没问题。
最后一行尝试做同样的事情,但跳过了必须声明和填充变量的额外步骤。没有骰子 - 解析器抱怨这是一个语法错误。我尝试了各种额外的括号和SELECT
以及诸如此类的东西,但无济于事。
怎么样?有什么方法可以做到这一点?
我知道当有人告诉我时,我会感到愚蠢......