我想将某些值从子问场串联到字符串中。但是发生了什么事,我不明白。
当我使用此SQL时:
select (
select t1.value
-- + '; '
from Table1 t1
join Table2 t2 on t1.xId=t2.xId and t1.TypeId in (31,33)
where t2.pId=1001
for xml PATH('')
)
as ValuesAsString
我得到:
<value>value 1</value><value>value 2</value>
但是,当我删除' - '并再次运行查询时,输出变为:
value 1; value 2;
为什么要删除XML标签?
我正在使用SQL Server 2008
尝试在没有XML功能的情况下运行内部查询。在原始查询中,它产生了一个名为value
的单列的结果集,因为您直接从称为value
的列中选择。
在更新的查询中,您可以获得一个带有单个未命名列的结果集,因为您正在选择 expression value。
因此,标签名称基于列名(或任何应用的别名),在更新的示例中,该列没有名称。而且由于无法在XML中具有未命名元素,因此省略了元素标签。
select (
select t1.value
+ '; ' as fruitbat
from Table1 t1
join Table2 t2 on t1.xId=t2.xId and t1.TypeId in (31,33)
where t2.pId=1001
for xml PATH('')
)
as ValuesAsString
将产生XML,并包含在<fruitbat>
元素中的值。
,因为该列的名称用作FOR XML PATH('')
中的元素名称。当您具有计算的表达式并且不提供列别名(... AS alias_name
或alias_name=...
)时,列名不存在,因此没有元素名称呈现(空的XML元素名称无效)。
要删除列名,请选择列作为[text()]
属性,例如
...
select [text()]=t1.value
...
更多信息:1,2。