Sql server SQL以匹配嵌套XML节点的内容
我有一个包含如下嵌套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
<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()
的文档: