将 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 显式”?的主要内容,如果未能解决你的问题,请参考以下文章

SQL CE select语句中的反向布尔(位)值

用于 XML 文件持久性的 LINQ to SQL 等效项

sql 用于XML示例的MS SQL

sql select as的用法

python如何表示0~10秒的时间戳,频率为10Hz?

用于 XML 和 SQL Server 集成的 .NET 应用程序