如何使用.query()
的{{1}}语法来选择特定节点,但只获取内部文本而不是包含在节点标记中的内部文本?
当我这样做时:
t-sql
我明白了:
SELECT TOP 1 [XMLContent].query('/Event/Username'), * from Events
但我想要的只是<Username>BURGUNDY</Username>
。很明显我可以做一些子字符串来获得它,但我希望有一个快速简便的方法来做到这一点。
答案 0 :(得分:8)
您可以使用xquery data()函数:
[XMLContent].query('data(/Event/Username)')
但是,这将返回XML作为类型(即使没有标记)。
您也可以使用.value而不是.query:
[XMLContent].value('/Event[1]/Username[1]', 'NVARCHAR(MAX)')
答案 1 :(得分:4)
declare @xml xml;
set @xml = '<Event><Username>BURGUNDY</Username></Event>'
Select @xml.value('/Event[1]/Username[1]', 'varchar(30)');
答案 2 :(得分:3)
使用.value()代替.query()