4

注: SQL Fiddle で詳しく説明されているこの例を参照するか、以下のコードを参照してください。これらのDECLARE @XML variable例は、XML 列から XML データを実際に取得しようとするときに構文を混乱させ、非 XML 行を対象としているためです。

CREATE TABLE ##xml (
    ID TINYINT IDENTITY(1,1),
    Value XML
)

INSERT INTO ##xml  (Value)
VALUES ('<Animals key="zoo" fish="22" dogs="0" birds="4" />')
    , ('<Animals key="house" fish="0" dogs="1" birds="2" />')
    , ('<Animals key="business" fish="0" dogs="0" birds="12" />')

SELECT *
FROM ##xml

SELECT nodes.child.value('key[1]', 'VARCHAR(50)')
FROM ##xml.Value.nodes('Animal') AS nodes(child)
-- Errors here, though the syntax looks correct

DROP TABLE ##xml

XML のノードを照会して次のような結果を生成しようとしても、「無効な列名 '##xml'。XMLDT メソッド 'nodes' は xml 型の列でのみ呼び出すことができます」というエラーが表示されます。以下:

Key      | Fish | Dogs | Birds
Zoo         22     0       4
House        0     1       2
Business     0     0      12

FROM ステートメントの構文を特定の列 (Value) を指すように変更すると、Value が認識された組み込み関数名ではないという他のエラーが表示されることに注意してください。

4

1 に答える 1

5

次のようにします。

SELECT  nodes.child.value('@key','varchar(100)')
FROM    ##XML a
        CROSS APPLY a.value.nodes('/Animals') AS nodes(child)
于 2013-07-24T18:48:08.830 に答える