使用以下XML:
<Path>
<To>
<Value>
<Array>
<NumberDecimal>10.0</NumberDecimal>
<TextEnglish>Ten</TextEnglish>
<NumberRomanNumeral>X</NumberRomanNumeral>
</Array>
</Value>
</To>
</Path>如何筛选以下交叉应用于所有/只Number***节点?
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM imports i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[local-name(.) = ''NumberDecimal'']') AS nodes(child)返回:
NumberDecimal: 10
需要这样做:
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM imports i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[local-name(.) = ''Number/*'']') AS nodes(child)需要返回:
NumberDecimal: 10 NumberRomanNumeral: x
但它什么也没有回报..。
发布于 2017-09-18 21:29:54
可以使用[contains(local-name(.),'Number')]' 演示查找其名称包含字符串Number的元素。
Declare @x xml = '<Path>
<To>
<Value>
<Array>
<NumberDecimal>10.0</NumberDecimal>
<TextEnglish>Ten</TextEnglish>
<NumberRomanNumeral>X</NumberRomanNumeral>
</Array>
</Value>
</To>
</Path>'
SELECT child.value('concat(local-name(.),": ",.)', 'varchar(max)') AS [value]
FROM (SELECT @x as import_data) i
CROSS APPLY i.import_data.nodes('/Path/To/Value/Array/*[contains(local-name(.),''Number'')]') AS nodes(child)或[substring(local-name(.),1,6) eq "Number"]来查找字符串位于特定位置的元素(在本例中为开始)
对于更有异国情调的东西,您最好在TSQL中进行。
WHERE child.value('local-name(.)', 'sysname') LIKE '[SomeExpression]'https://stackoverflow.com/questions/46288361
复制相似问题