在t-sql中使用.query()来获取内部文本

时间:2011-03-11 19:28:26

标签: sql sql-server xml tsql xpath

如何使用.query()的{​​{1}}语法来选择特定节点,但只获取内部文本而不是包含在节点标记中的内部文本?

当我这样做时:

t-sql

我明白了:

SELECT TOP 1 [XMLContent].query('/Event/Username'), * from Events

但我想要的只是<Username>BURGUNDY</Username> 。很明显我可以做一些子字符串来获得它,但我希望有一个快速简便的方法来做到这一点。

3 个答案:

答案 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()