我有以下格式的 XML:
<filters>
<filter name="filterByOperatingSystem">
<parameters operatingSystem="Windows" />
</filter>
<filter name="filterBySoftware">
<parameter software="Office" />
</filter>
</filters>
存储在@XML
.
我想做的是遍历每个过滤器,以便我可以进行一些处理。
我的想法是我可以在光标中获取每个过滤器名称以及参数元素,但到目前为止我能得到的最接近的是:
DECLARE crsDTO cursor static forward_only read_only for
SELECT
tab.col.value('@name','NVARCHAR(64)')
FROM
@XML.nodes('//filter') tab(col)
我尝试了以下查询以查看是否可以获取参数 xml:
DECLARE crsDTO cursor static forward_only read_only for
SELECT
tab.col.value('@name','NVARCHAR(64)'),
tab.col.value('parameter[1]' 'XML')
FROM
@XML.nodes('//filter') tab(col)
但我得到了错误:
值类型中使用的数据类型 XML 无效
因为我的过滤器可以有不同的属性,所以我不想尝试使用第一个查询直接获取属性(我的想法是做光标,然后根据过滤器名称,我可以从节点获取特定参数),但是由于无法取出 xml 节点,我不知道该怎么做。
关于如何解决这个问题的任何建议?