【发布时间】:2017-01-10 15:50:58
【问题描述】:
我在 SQL Server 的表列中有这个 XML:
<root>
<Request>
<RequestData>
<VendorLeadList>
<VendorLeadItem>
<CampaignOfferTypeID>REN</CampaignOfferTypeID>
<LeadDispositionID>Lead</LeadDispositionID>
<Jurisdiction>NY</Jurisdiction>
<FirstName>Shikasta</FirstName>
<LastName>Kashti</LastName>
<MessageId>1347_1483825159115_c8273</MessageId>
</VendorLeadItem>
</VendorLeadList>
</RequestData>
<DualMessageID/>
<AzureBlobFile/>
<AzureBlobImageList/>
</Request>
</root>
我想查询与某些具有特定值的节点匹配的所有记录。例如,我想要 LeadDispositionID=Lead 和 Jurisdiction=NY 和 CampaignOfferTypeID=REN 和 MessageId 元素存在的所有记录(无论值是什么。)
我试过了,但它不起作用(没有错误但条件不匹配,它返回其他记录):
SELECT TOP 10 *
FROM [Messages]
WHERE PayLoadXml.exist('//LeadDispositionID[.="Lead"] and //CampaignOfferTypeID[.="REN"] and //Jurisdiction[.="NY"] and //MessageId') = 1
ORDER BY ID DESC
知道我做错了什么吗?
【问题讨论】:
-
你的 xpath 在这里绝对没问题。我会用
PayLoadXml.exist()函数在那里侦察。 -
@Granitosaurus 不,你不能简单地将节点与
and... -
@Shnugo 你是什么意思?
and是完全有效的 xpath,您可以像这样组合节点,xpath 将单独评估每个节点,如果匹配则返回'1',否则返回'0'。 -
@Granitosaurus 只需使用我的示例代码并将
WHERE itm.exist(N'LeadDispositionID[.="Lead"] and Jurisdiction[.="NY"]')=1作为最后一行。尝试使用and Jurisdiction[.="NY"]和不使用。尝试使用and Jurisdiction[.="Blah"]或and xyz[.="Blah"]之类的内容。你不会得到预期的结果...
标签: sql-server xml xpath