Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL以匹配嵌套XML节点的内容_Sql Server_Xml - Fatal编程技术网

Sql server SQL以匹配嵌套XML节点的内容

Sql server SQL以匹配嵌套XML节点的内容,sql-server,xml,Sql Server,Xml,我有一个包含如下嵌套XML的数据库字段: <configuration> <modules> <genericMailer> <moduleContent> <data> <sendMethod>Email</sendMethod> SELECT a.ApplicationId, x.XmlCol.value('(moduleCon

我有一个包含如下嵌套XML的数据库字段:

<configuration>
   <modules>
    <genericMailer>
      <moduleContent>
        <data>
          <sendMethod>Email</sendMethod>
SELECT  a.ApplicationId,
        x.XmlCol.value('(moduleContent/data/sendMethod)[1]','VARCHAR(100)') AS SendMethod
FROM    Applications a
CROSS APPLY a.AppConfig.nodes('/configuration/modules/genericMailer') x(XmlCol);

但是我不知道如何只搜索匹配的值。我需要的WHERE子句是什么?

以下是一些可能的方法:

a。使用
value()

SELECT  a.ApplicationId,
        x.XmlCol.value('(moduleContent/data/sendMethod)[1]','VARCHAR(100)') AS SendMethod
FROM    Applications a
CROSS APPLY a.AppConfig.nodes('/configuration/modules/genericMailer') x(XmlCol)
WHERE  x.XmlCol.value('(moduleContent/data/sendMethod)[1]','VARCHAR(100)') LIKE '%mail%'
b。使用XPath方法
contains()
检查
sendMethod
值是否包含子字符串
“mail”
和SQL Server方法
exist()
筛选通过检查的行:

SELECT  a.ApplicationId,
        x.XmlCol.value('(moduleContent/data/sendMethod)[1]','VARCHAR(100)') AS SendMethod
FROM    Applications a
CROSS APPLY a.AppConfig.nodes('/configuration/modules/genericMailer') x(XmlCol)
WHERE x.XmlCol.exist('moduleContent/data/sendMethod[contains(.,"mail")]') = 1

什么类型的数据库和什么版本?谢谢,我们感兴趣的节点的[1]是什么?@Izzy请参阅
exist()
的文档: