1

次の XML があります。

<help>
  <item field="field1" help="helptext" />
  <item field="field2" help="helptext" />
  <item field="field3" help="helptext" />
</help>

これを SQL サーバーの XML DataType に格納しており、フィールドとヘルプ テキストを別々に引き出したいと考えています。つまり、次のような結果セットです。

 | field1 | helptext |  
 | field2 | helptext |  
 | field3 | helptext |

これを達成する方法を知っている人はいますか?

よろしくお願いします。

アダム

4

3 に答える 3

1

次のことが役立つかどうかを確認してください。

DECLARE @processedXmlDoc int
DECLARE @inputDoc varchar(1000)

EXEC sp_xml_preparedocument @processedXmlDoc OUTPUT, @inputDoc 

SELECT    *
FROM       OPENXML (@processedXmlDoc , '/help/item',1)
            WITH (field varchar(20) 'field',
                  help varchar(20) 'helpText')

EXECUTE sp_xml_removedocument @idoc

お役に立てば幸いです。

于 2012-12-03T13:15:58.540 に答える
1

次のようなものを試してください。

DECLARE @input XML = '<help>
  <item field="field1" help="helptext" />
  <item field="field2" help="helptext" />
  <item field="field3" help="helptext" />
</help>'

SELECT
    Field = Item.value('@field', 'varchar(25)'),
    HELP = Item.value('@help', 'varchar(50)')
FROM
    @input.nodes('/help/item') AS XTbl(Item)
于 2012-12-03T13:16:21.290 に答える
1
DECLARE @xml AS XML = '<help>
  <item field="field1" help="helptext" />
  <item field="field2" help="helptext" />
  <item field="field3" help="helptext" />
</help>'

select c.value('@field', 'varchar(max)') field, c.value('@help', 'varchar(max)') help
from @xml.nodes('/help/item') T(c);

xml データがテーブル フィールドにある場合に同じことを行うには、次を使用します。

SELECT c.value('@field', 'varchar(max)') field, c.value('@help', 'varchar(max)') help
FROM MyTable A CROSS APPLY A.MyXmlField.nodes('/help/item') T(c)

MyTable は、xml データを含むフィールド MyXmlField を持つテーブルです。

于 2012-12-03T13:19:19.460 に答える