sql - 使用xQuery提取SQL变量中也存在的属性值

标签 sql sql-server xml xpath xquery

XML结构:

<ns0:message xmlns:ns0='xxx:testing'>
  <ns0:field name='AAA'>...</ns0:field>
  <ns0:field name='BBB'>...</ns0:field>
  <ns0:field name='VVV'>...</ns0:field>
  <ns0:field name='CAR'>...</ns0:field>
</ns0:message>


我有SQL,它将提取名为name的属性的值:

SELECT
  ( (SELECT ',' + CHAR(13) + P.N.value('@name', 'varchar(max)')
       FROM myTable.message_xml.nodes('declare namespace ns0="xxx:testing";
                                       ns0:message/ns0:field[ @name = "AAA" or
                                                              @name = "BBB"]') P(N)
        FOR XML PATH(''), type).value('substring(text()[1], 3)', 'varchar(max)')) as ATTRIBUTE_VALUES



这将返回如下所示的列:

ATTRIBUTE_VALUES
---------------
AAA,
BBB


我的问题是潜在属性值的列表很大。
我希望在查询中不对要检查的每个属性值重复@name = "AAA",而是希望将其声明为变量,例如:

DECLARE @ATTRIBUTES VarChar(Max)
SET @ATTRIBUTES = '(AAA,BBB,CAR,XYZ)'


然后只需将变量粘贴在sql中即可:

[@name = sql:variable("@ATTRIBUTES")]


但这不适用于我用来构建变量的括号,逗号等的任何组合。

最佳答案

您可以使用contains功能。
像这样声明一个变量:

DECLARE @ATTRIBUTES VarChar(Max) = '|AAA|BBB|CAR|XYZ|';


在查询中而不是@name = "AAA"使用:

contains(sql:variable("@ATTRIBUTES"), concat("|", @name, "|"))

关于sql - 使用xQuery提取SQL变量中也存在的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915360/

相关文章:

sql-server - "If not exists"在 SQL CE 上失败

php - 无法将返回的 API 请求插入数据库 - php

mysql - 限制在 MySQL 中返回的记录

php - 如何从另一个表调用查询

php - MySQL 用 PHP 递增 int

mysql - 从表格中为每一行选择最高版本

sql-server - SQL Server 中的 REGEXP_SUBSTR 等效项

mysql - SQL Join 查询左表中不匹配的行

jquery - 使用 jQuery 解析关于类别和子类别的大型数据集

android - OnItemClickListener 在 ListPopupWindow 下既没有获得有效的父 ID 也没有获得 View ID