假设您有一个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元素具有惟一的名称,用于生成和转换成xml格式的查询。这就是我使用Category1和Category2的原因。我希望最终结果是这样的:
<Taxonomy>
<Category Level="1">Clothing</Category>
<Category Level="2">Jeans</Category>
</Taxonomy>这可以使用XML显式like here来完成,但是由于我的代码要大得多,所以它变得非常混乱和复杂。
使用xml.modify,您可以更改值或属性,但不能更改元素本身。
是否有一种方法可以将第一个查询结果存储在@X1XML变量中,然后将元素Category1 & Category2转换为Category2并将其放入变量@X2?类似于在文本文件中使用的搜索和替换,但是在查询期间。
发布于 2014-07-30 18:17:26
您也可以使用嵌套:
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');发布于 2014-07-30 17:39:47
在元素之间偷偷插入null可以达到以下目的:
Select
1 as 'Category/@Level',
t.MainCat as "Category",
null,
2 as 'Category/@Level',
t.SubCat as "Category"
FOR XML PATH (''), ROOT('Taxonomy')https://stackoverflow.com/questions/25040868
复制相似问题