3

所以我试图从 SQL Server 表中选择每条记录,<FIELD>Payment method我想要<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>')
4

1 回答 1

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
于 2013-08-03T21:08:34.160 回答