![](/img/trans.png)
[英]Use of xml.modify to insert parameters into specific element of an xml column
[英]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.