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

Check whether one of the attributes contains given value or not

我正在使用 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 值或其中一个文本值是否包含 @p。在此示例中,结果将为 true ,因为第一个标签中的文本值包含 ext1。

您可以使用 .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