[英]Filter SQL Queries on XML attributes
我有一个otar.Results
列。我的sql数据库中包含xml数据的结果。 这是xml数据的示例:
<certInformationList>
<certItem layoutSeqOrSealDescrID="1" qxCertInformation="8;20021" />
<certItem layoutSeqOrSealDescrID="2" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="3" qxCertInformation="3308ASX1D1I1S1V4AAR5AE00910WA3WK1M5C1Q8P1W1" />
<certItem layoutSeqOrSealDescrID="4" qxCertInformation="2014-04-29" />
<certItem layoutSeqOrSealDescrID="5" qxCertInformation="13:07:43" />
<certItem layoutSeqOrSealDescrID="6" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="7" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="8" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="9" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="10" qxCertInformation="9150077-263" />
<certItem layoutSeqOrSealDescrID="11" qxCertInformation="260201" />
<certItem layoutSeqOrSealDescrID="12" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="13" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="14" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="15" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="16" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="17" qxCertInformation="" />
<certItem layoutSeqOrSealDescrID="18" qxCertInformation="" />
</certInformationList>
我想过滤查询,以便获取其中layoutSeqOrSealDescrID="1"
和qxCertInformation="8;20021
”的记录
我试过了
otar.Results.exist('/certInformationList/certItem[layoutSeqOrSealDescrID="1" and qxCertInformation="8;20021"]') = 1
但是它不返回任何记录。
注意:我必须能够动态构建查询
任何帮助将不胜感激。
最好的问候约翰
在属性名称的开头使用@
来引用XPath中的属性,否则将其误认为是同名的子元素:
/certInformationList/certItem[@layoutSeqOrSealDescrID="1" and @qxCertInformation="8;20021"]
有一个包含两个记录的表,一个记录是您的示例(短路!),第二个记录已更改为“ 8; 20021”。 选择中只有第一个返回:
DECLARE @otar TABLE(id INT, Results XML);
INSERT INTO @otar VALUES
(1,'<certInformationList>
<certItem layoutSeqOrSealDescrID="1" qxCertInformation="8;20021" />
</certInformationList>')
,(2,'<certInformationList>
<certItem layoutSeqOrSealDescrID="1" qxCertInformation="8;20022" />
</certInformationList>');
SELECT *
FROM @otar AS o
WHERE o.Results.exist('//certItem[@layoutSeqOrSealDescrID="1" and @qxCertInformation="8;20021"]')=1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.