0

したがって、この質問から構築するには、XML フィールド = Xの XML フィールドから選択し、同じ SQL Fiddle http://sqlfiddle.com/#!3/7c0a0/5を使用します。

「支払い方法」の値を持つフィールドを持つアイテムと、25 の NEWVALUE を持つアイテムを持つアイテムの両方を持つレコードを取得する方法を理解できないようです。

以下を試しましたが、結果は返されませんでした。存在しないノードの 1 つの where 句ですべてを探しているためだと思います。

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

私は何が欠けていますか?

4

2 に答える 2

1

条件が満たされている単一のアイテムのみが必要な場合は、次のことができます。

select
    T1.ID, T.C.query('.')
from T1 
   cross apply XMLFIELD.nodes('/ITEMS/ITEM[FIELD[.="Payment method"] and NEWVALUE[.="Debit"]]') as T(C)

また

select
    T1.ID, T.C.query('.')
from T1 
   cross apply XMLFIELD.nodes('/ITEMS/ITEM') as T(C)
where
    T.C.value('FIELD[1]', 'nvarchar(max)') = 'Payment method' and
    T.C.value('NEWVALUE[1]', 'nvarchar(max)') = 'Debit'

SQL フィドルのデモ

コメントした後、次のようなものが必要になるのではないかと思います。

select
    T1.*
from T1 
where 
    XMLFIELD.exist
    ('/ITEMS[
          ITEM[FIELD[.="Payment method"] and NEWVALUE[.="Debit"]] and
          ITEM[DATATYPE[.="4"] and NEWVALUE[.="25"]]
       ]'
    ) = 1

SQL フィドルのデモ

于 2013-08-15T17:26:24.127 に答える