我正在使用SQL Server 2012.我有以下代码
DECLARE @p varchar(4)
SET @p = ext1
DECLARE @x xml
SET @x = '<labels defaultText = "Some text 2012">
<label text = "Some text1" />
<label text = "Some text2" />
<label text = "Some text3" />
</labels>'
请帮助编写一个xpath / xquery查询来检查defaultText值或其中一个文本&#39;值包含@p或不包含。在此示例中,结果将为true,因为第一个标签中的文本值包含ext1。
答案 0 :(得分:1)
您可以使用.nodes()
遍历<label>
并使用.value()
获取根节点属性的值以及<label>
的属性值。像这样的东西
DECLARE @p varchar(4)
SET @p = 'ext1'
DECLARE @x xml
SET @x = '<labels defaultText = "Some text 2012">
<label text = "Some text1" />
<label text = "Some text2" />
<label text = "Some text3" />
</labels>'
DECLARE @check BIT = 0
SELECT TOP 1 @check = 1
FROM @x.nodes('labels/label') as t(c)
WHERE c.value('@text','VARCHAR(20)') LIKE '%' + @p +'%'
OR @x.value('/labels[1]/@defaultText','VARCHAR(20)') LIKE '%' + @p +'%'
SELECT @check