繁体   English   中英

在TSQL中使用xml.modify或其他方法更改元素名称

[英]Change element name with xml.modify or other method in TSQL

假设您有一个TSQL查询:

1 as 'Category1/@Level',
2 as 'Category2/@Level',
t.MainCat as 'Category1', 
t.SubCat as 'Category2'
FOR XML PATH (''), ROOT('Taxonomy')

产生以下结果:

<Taxonomy>
      <Category1 Level="1">Clothing</Category1>
      <Category2 Level="2">Jeans</Category2>
</Taxonomy>

元素Category1和Category2具有用于sql查询生成和转换为xml格式的唯一名称。 这就是为什么我使用Category1和Category2。 我希望最终结果是这样的:

<Taxonomy>
      <Category Level="1">Clothing</Category>
      <Category Level="2">Jeans</Category>
</Taxonomy>

可以使用此处的 XML EXPLICIT来完成此操作 ,但是由于我的代码大得多,因此变得非常混乱且非常复杂。

使用xml.modify可以更改值或属性,但不能更改元素本身。

有没有一种方法可以将第一个查询结果存储在@ X1 xml变量中,然后将Category1和Category2元素更改为Category并将其放入变量@ X2中? 诸如搜索和替换之类的操作在文本文件中使用,但随后在查询期间使用。

在元素之间潜入null可以解决问题:

Select
1 as 'Category/@Level',
t.MainCat as "Category",
null,
2 as 'Category/@Level',
t.SubCat as "Category"
FOR XML PATH (''), ROOT('Taxonomy')

您也可以使用嵌套:

select
    (select 1 as '@Level', 'Clothing'
        for xml path('Category'), type),
    (select 2 as '@Level', 'Jeans'
        for xml path('Category'), type)
for xml path('Taxonomy');

values子句在形成输出xml之前构造类别列表:

select Cat.Level as '@Level', Cat.Value as 'text()'
from (values
        (1, 'Clothing')
        ,(2, 'Jeans')
    ) Cat(Level, Value)
for xml path('Category'), root('Taxonomy');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM