簡體   English   中英

過濾XML屬性上的SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM