XML处理,如何检查SQL Server中的元素中是否包含属性

时间:2017-08-04 03:16:55

标签: sql-server xml

以下是示例xml字符串:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tbl_Main">
  <thead>
    <tr>
      <th><input type="checkbox" />A</th>
      <th><input type="checkbox" />B</th>
      <th><input type="checkbox" />C</th>
      <th><input type="checkbox" />D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>01</td>
      <td>02</td>
      <td>03</td>
      <td>04</td>
    </tr>
    <tr>
      <td>11</td>
      <td>12</td>
      <td>13</td>
      <td>14</td>
    </tr>
    <tr>
      <td>21</td>
      <td>22</td>
      <td>23</td>
      <td>24</td>
    </tr>
  </tbody>
</table>
<input type="submit" id="btn_generate" value="Generate" />
<br />
<table id="tbl_Child">
</table>

我想检查所有元素是否包含PO和DestRule属性,否则,打印为false,否则打印为true。

可以SQL服务器那样做,如何编写SQL语句?

1 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE @xml        xml = '<R  RMA="1"   UsrID="AXxxx"  FirstName="xx" LastName="yy" Email="dd" title="">  
    <Contract ContractNr="xxx1" ETC=""  TermRC=""  DESC=""  INVCOMMENT="" TermDate="03/01/2014" PO="XXX" DestRule="xxxx">     
        <Asset ID="12345" AXID="abcde"   RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
        <Asset ID="67890" AXID="abcde1"  RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
    </Contract>

    <Contract ContractNr="xxx2" ETC=""  TermRC=""  DESC=""  INVCOMMENT=""  TermDate="03/01/2014" DestRule="xxxx">    
        <Asset ID="54321" AXID="edcba"   RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID="" />
        <Asset ID="09876" AXID="edcba1"  RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID="" />
    </Contract>

    <Contract ContractNr="xxx1" ETC=""  TermRC=""  DESC=""  INVCOMMENT="" TermDate="03/01/2014" PO="XXX" >     
        <Asset ID="12345" AXID="abcde"   RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
        <Asset ID="67890" AXID="abcde1"  RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
    </Contract>    

    <Contract ContractNr="xxx1" ETC=""  TermRC=""  DESC=""  INVCOMMENT="" TermDate="03/01/2014" >     
        <Asset ID="12345" AXID="abcde"   RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
        <Asset ID="67890" AXID="abcde1"  RecvdDt="05/02/2014" ReconDt="05/02/2014" ReceiptID=""/>
    </Contract>    
 </R>'

IF EXISTS
    (
        SELECT      NULL
         FROM       @xml.nodes('/R/Contract')   X(Contract)
         WHERE      Contract.value('@PO', 'varchar') IS NULL
                OR  Contract.value('@DestRule', 'varchar') IS NULL
    )
BEGIN
    PRINT 'some contracts do not have PO or DestRule'
END
ELSE
BEGIN
    PRINT 'OK'
END