将 SQL 的 XML 结果列命名为“用于 xml 显式”?
Posted
技术标签:
【中文标题】将 SQL 的 XML 结果列命名为“用于 xml 显式”?【英文标题】:Name XML result column of TSQL "for xml explicit"? 【发布时间】:2009-10-14 14:14:35 【问题描述】:我有一个使用for xml explit
返回 XML 结果的查询。
选择... 从 ... 按 [BatchType!1!TypeName]、[FormType!2!TypeName]、标签、父级排序 对于 xml 显式,root('ClientImages')
但是生成的列名的名称就像是神秘的一样
有没有办法更改列名?
[回答]
我有几个嵌套的 WITH
语句,所以我保存了查询结果,而不将 FOR XML EXPLICIT
应用到临时表 @xmlTable
中,然后将 XML EXPLICIT 结果设置为 XML,然后返回它。
declare @xmlResult xml
set @xmlResult =(
select *
from @xmlTable
for xml explicit, root('ClientImages'))
select @xmlResult as XmlResult
【问题讨论】:
您使用的是什么版本的 SQL Server?在 2005 年及以后,绝对不再需要“FOR XML EXPLICIT”——FOR XML PATH 更容易使用并且更好 @marc_s:我有复杂的结构,我无法使用 FOR XML PATH 来表示。 【参考方案1】:-- 添加一个 select (first) 和 type (on the end), and as [something]
选择 ( 选择 1 作为标签, null 作为父母, 'algo' 作为 [nodo!1!attr] 对于 xml 显式,键入 ) 作为 [MyDesiredName]【讨论】:
【参考方案2】:不,据我所知没有。 SQL Server Management Studio 将为您的 XML 自动生成这样的名称。
您可以先将输出分配给 XML 变量,然后选择该变量以获得“好”的列名:
DECLARE @XmlResult XML
SELECT @XmlResult = ......
FROM .......
SELECT @XmlResult
但除此之外,我不知道有任何方法可以影响 SSMS 生成的列的名称。
马克
【讨论】:
我没有重构WITH
语句,而是将结果(不应用 FOR XML EXPLIT
)放入临时表中,然后简单地将其作为 XML 从临时表中返回 - 答案已更新。【参考方案3】:
如果您在返回的 xml 中需要命名空间:
WITH XMLNAMESPACES ('urn:http://YourNamespaceHere' as NS0)
SELECT ( ... ) AS XmlResult
您也可以在子选择中使用 NS0 命名空间前缀。
【讨论】:
以上是关于将 SQL 的 XML 结果列命名为“用于 xml 显式”?的主要内容,如果未能解决你的问题,请参考以下文章