【问题标题】:Check if a value exists in a collection stored in XML data type column检查存储在 XML 数据类型列中的集合中是否存在值
【发布时间】:2012-04-23 06:58:21
【问题描述】:

我有一个名为“标签”的 XML 数据类型列。

其中,我正在存储一个集合,如下所示:

<ArrayOfString>
    <string>personal</string>
    <string>travel</string>
    <string>gadgets</string>
    <string>parenting</string>
</ArrayOfString>

我想选择具有我正在寻找的值之一的所有行:例如,我想选择表中具有标签“travel”的所有行。

如果我知道我要查找的值的索引,我知道这是可行的:

select * from posts
where tags.value('(/ArrayOfString/string)[1]', 'nvarchar(1000)') = 'travel'

但只有当标签“travel”是节点中的第二个项目时,此查询才有效。如何检查一个值是否存在,无论它在什么位置?

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql azure-sql-database


    【解决方案1】:
    select *
    from tags
    where tags.exist('/ArrayOfString/string[. = "travel"]') = 1
    

    如果你想检查一个变量,或者像这样。

    declare @Val varchar(10)
    set @Val = 'travel'
    
    select *
    from tags
    where tags.exist('/ArrayOfString/string[. = sql:variable("@Val")]') = 1
    

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

      SELECT
          *
      FROM
          dbo.Posts
      WHERE
          tags.exist('/ArrayOfString/string/text()[. = "travel"]') = 1
      

      这将列出在您的 XML 中的一个字符串中具有“旅行”的所有行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-17
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多