从XML字段中选择XML字段= X.

时间:2013-08-03 21:01:21

标签: sql-server xml tsql

所以我试图从<FIELD>等于Payment method的SQL Server表中选择每条记录,但我想要<NEWVALUE>的值。我似乎无法获得任何接近我想要的东西。有什么想法吗?

http://sqlfiddle.com/#!3/7c0a0/1/0

(小提琴内容)

create table T1(ID int identity(1, 1), XMLFIELD xml)
insert into T1(XMLFIELD) values('<ITEMS>
  <ITEM>
    <PROCESS>True</PROCESS>
    <FIELD>Amount</FIELD>
    <NEWVALUE>100</NEWVALUE>
    <ACTION>0</ACTION>
    <FIELDKEY>AMOUNT</FIELDKEY>
    <DATATYPE>4</DATATYPE>
  </ITEM>  
  <ITEM>
    <PROCESS>True</PROCESS>
    <FIELD>Payment method</FIELD>
    <NEWVALUE>Credit card</NEWVALUE>
    <ACTION>0</ACTION>
    <FIELDKEY>PAYMENTMETHODCODE</FIELDKEY>
    <DATATYPE>1</DATATYPE>
  </ITEM>  
</ITEMS>')
insert into T1(XMLFIELD) values('<ITEMS>
  <ITEM>
    <PROCESS>True</PROCESS>
    <FIELD>Amount</FIELD>
    <NEWVALUE>25</NEWVALUE>
    <ACTION>0</ACTION>
    <FIELDKEY>AMOUNT</FIELDKEY>
    <DATATYPE>4</DATATYPE>
  </ITEM>  
  <ITEM>
    <PROCESS>True</PROCESS>
    <FIELD>Payment method</FIELD>
    <NEWVALUE>Debit</NEWVALUE>
    <ACTION>0</ACTION>
    <FIELDKEY>PAYMENTMETHODCODE</FIELDKEY>
    <DATATYPE>2</DATATYPE>
  </ITEM>  
</ITEMS>')

1 个答案:

答案 0 :(得分:3)

尝试这样的事情:

SELECT
    ID,
    NewValue = XItem.value('(NEWVALUE)[1]', 'varchar(50)')
FROM 
    T1
CROSS APPLY 
    XmlField.nodes('/ITEMS/ITEM') as XTbl(XItem)
WHERE
    XItem.exist('FIELD[.="Payment method"]') = 1