TSQL xml查询 [英] TSQL xml query

查看:69
本文介绍了TSQL xml查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的表格中有xml类型的列。我存储了xml消息。我需要查询整个表的特定值。

My table has column of type xml. I stored xml messages. I need to query entire table for particular value.

我该怎么做。

这是xml消息,如下所示:

Here is xml message that looks like:

我需要得到ID = P137605的所有行。我们怀疑可能有多行具有该值。 

I need to get all rows where ID =P137605. We are suspecting there may be multiple rows with that value. 

谢谢

推荐答案

你可以利用value()方法解析ID值并将其用作过滤谓词。

you can leverage value() method to parse ID value and use that as filter predicate.

根据你的示例数据,我创建了一个有三行的表。第(1)和(3)行的ID = P137605  and row(2)有ID P137606

Taking your example data, I have created a table with three rows. Row (1) and (3) have ID = P137605  and row (2) has ID P137606

CREATE TABLE xml_table (id int, xml_data xml);

INSERT INTO xml_table 
VALUES
(1,N'<MESSAGE MessageID =''S001'' MessageCreationTime =''2019-06-04T15:15:55.667'' AppName=''ACT''>
  <TRANSACTIONS ChildCount=''1''>
    <TRANSACTION>
      <ACTION>Add</ACTION>
      <BUS_CODE>Deposit</BUS_CODE>
      <CATEGORY>Savings</CATEGORY>
      <DEPOSIT_DATE>2019-06-05</DEPOSIT_DATE>
      <APPROVAL_DATE>2019-06-05</APPROVAL_DATE>      
      <ID>P137605</ID>      
      <RECEIVED>Y</RECEIVED>
      <ACCOUNTS ChildCount=''1''>
        <ACCOUNT>
          <DEBIT_ACCOUNT>1101</DEBIT_ACCOUNT>
          <DEBIT_SUBACCOUNT>00-1101</DEBIT_SUBACCOUNT>
          <CREDIT_ACCOUNT>1002</CREDIT_ACCOUNT>
          <CREDIT_SUBACCOUNT>11-1002</CREDIT_SUBACCOUNT>
          <AMOUNT>100.0000</AMOUNT>          
        </ACCOUNT>
      </ACCOUNTS>
    </TRANSACTION>
  </TRANSACTIONS>
</MESSAGE>')
,(2,N'<MESSAGE MessageID =''S002'' MessageCreationTime =''2019-06-04T15:15:55.667'' AppName=''ACT''>
  <TRANSACTIONS ChildCount=''1''>
    <TRANSACTION>
      <ACTION>Add</ACTION>
      <BUS_CODE>Deposit</BUS_CODE>
      <CATEGORY>Savings</CATEGORY>
      <DEPOSIT_DATE>2019-06-05</DEPOSIT_DATE>
      <APPROVAL_DATE>2019-06-05</APPROVAL_DATE>      
      <ID>P137606</ID>      
      <RECEIVED>Y</RECEIVED>
      <ACCOUNTS ChildCount=''1''>
        <ACCOUNT>
          <DEBIT_ACCOUNT>1101</DEBIT_ACCOUNT>
          <DEBIT_SUBACCOUNT>00-1101</DEBIT_SUBACCOUNT>
          <CREDIT_ACCOUNT>1002</CREDIT_ACCOUNT>
          <CREDIT_SUBACCOUNT>11-1002</CREDIT_SUBACCOUNT>
          <AMOUNT>100.0000</AMOUNT>          
        </ACCOUNT>
      </ACCOUNTS>
    </TRANSACTION>
  </TRANSACTIONS>
</MESSAGE>')
,(3,N'<MESSAGE MessageID =''S003'' MessageCreationTime =''2019-06-04T15:15:55.667'' AppName=''ACT''>
  <TRANSACTIONS ChildCount=''1''>
    <TRANSACTION>
      <ACTION>Add</ACTION>
      <BUS_CODE>Deposit</BUS_CODE>
      <CATEGORY>Savings</CATEGORY>
      <DEPOSIT_DATE>2019-06-05</DEPOSIT_DATE>
      <APPROVAL_DATE>2019-06-05</APPROVAL_DATE>      
      <ID>P137605</ID>      
      <RECEIVED>Y</RECEIVED>
      <ACCOUNTS ChildCount=''1''>
        <ACCOUNT>
          <DEBIT_ACCOUNT>1101</DEBIT_ACCOUNT>
          <DEBIT_SUBACCOUNT>00-1101</DEBIT_SUBACCOUNT>
          <CREDIT_ACCOUNT>1002</CREDIT_ACCOUNT>
          <CREDIT_SUBACCOUNT>11-1002</CREDIT_SUBACCOUNT>
          <AMOUNT>100.0000</AMOUNT>          
        </ACCOUNT>
      </ACCOUNTS>
    </TRANSACTION>
  </TRANSACTIONS>
</MESSAGE>');

要选择ID = P137605的所有行,我使用以下查询:

To select all rows where ID = P137605, I used below query:

SELECT *
FROM xml_table
WHERE xml_data.value('(MESSAGE/TRANSACTIONS/TRANSACTION/ID)[1]', 'VARCHAR(100)') = 'P137605';

希望这就是你要找的东西!

Hope this is what you are looking for!


这篇关于TSQL xml查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆