检查其中一个属性是否包含给定值

时间:2015-04-16 11:19:47

标签: sql sql-server xpath xquery xquery-sql

我正在使用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。

1 个答案:

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