当我运行以下
select t.type
from (values ('Green'),('Blue'),('Red')) as t(type)
for xml path('')
Run Code Online (Sandbox Code Playgroud)
我收到这个输出
<type>Green</type>
<type>Blue</type>
<type>Red</type>
Run Code Online (Sandbox Code Playgroud)
如果我运行以下
select t.type + '/'
from (values ('Green'),('Blue'),('Red')) as t(type)
for xml path('')
Run Code Online (Sandbox Code Playgroud)
我收到这个输出
Green/Blue/Red/
Run Code Online (Sandbox Code Playgroud)
为什么在select中添加连接会导致xml文件中一行的type标签和输出被删除?运行 SQL Server 2012。
Eri*_*ing 15
添加串联字符串时,您将丢失“路径元素”。
例如,如果您这样做:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');
Run Code Online (Sandbox Code Playgroud)
你得到这个:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Run Code Online (Sandbox Code Playgroud)
列名或别名充当路径元素。
使用 RAW, ELEMENTS
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您获得了通用的“row”元素名称,但在第二个示例中,您获得了 row/type。
使用时RAW, TYPE
:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
Run Code Online (Sandbox Code Playgroud)
第一个查询返回有效的 XML,第二个查询抛出错误,因为路径元素缺少标识符。
使用AUTO
,表别名和列名变成路径:
SELECT type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
SELECT type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Run Code Online (Sandbox Code Playgroud)
但是如果没有别名,您会收到类似的错误:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Run Code Online (Sandbox Code Playgroud)
我会举一个例子,FOR XML EXPLICIT
但我现在开始喝酒是不负责任的。