2

私は@x.nodes('...')XQuery を初めて使用するので、戦っています。私は@x次のように構築されたXML変数を持っています:

CREATE TABLE tab (a int, b int, c int);
GO

INSERT INTO tab (a, b, c) VALUES (1, 11, 111);
INSERT INTO tab (a, b, c) VALUES (2, 22, 222);
INSERT INTO tab (a, b, c) VALUES (3, 33, 333);
INSERT INTO tab (a, b, c) VALUES (4, 44, 444);
GO

DECLARE @x XML = (SELECT * FROM tab FOR XML RAW, TYPE);

その内容が表示されると、次のようになります。

<row a="1" b="11" c="111" />
<row a="2" b="22" c="222" />
<row a="3" b="33" c="333" />
<row a="4" b="44" c="444" />

つまり、単一の複数行の文字列です。宛先テーブルで単一の複数要素 XML 値を多くの単一要素値に分割するにはどうすればよいですか? (公式のnodes() メソッド (xml データ型)ドキュメント ページは認識していますが、何か間違ったことをしています。)

CREATE TABLE tab2 (e XML);

??? ... @x.nodes('//row') ... ???

ありがとう、ペトル

PS 質問はService Broker に大まかに関連しています - XML メッセージから行を抽出する方法は?

4

1 に答える 1

1

OK - では、投稿した XML を含む XML 変数があり、これを個々のビットに分割する必要がありますか?

次のようなことを試してください:

SELECT
    value_a = c.value('(@a)[1]', 'int'),
    value_b = c.value('(@b)[1]', 'int'),
    value_c = c.value('(@c)[1]', 'int') 
FROM @x.nodes('/row') AS T(c)

それは私に次の出力を与えます:

ここに画像の説明を入力

それはあなたが探しているものですか?

更新: OK、私があなたを正しく理解していれば、これがあなたが望むものです:

SELECT
    c.query('.')
FROM @x.nodes('/row') AS T(c)

出力:

ここに画像の説明を入力

于 2012-07-20T12:13:19.630 に答える