0

xml ですべての guid ノードを選択する必要があります。ただし、以下のコードはそれらの最初のもののみを選択します。どうやってするの?

DECLARE @doc XML

SET @doc = 
    '<ArrayOfGuid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <guid>96eecbe2-d645-465d-8232-c7f21e3c6bf8</guid>
      <guid>38985702-0c0b-4e9c-bccb-af84ba4dd7ff</guid>
      <guid>67852205-092e-4db8-b31e-6f5d457db294</guid>
      <guid>92cf9106-445f-4b01-8259-613596b8a2a7</guid>
    </ArrayOfGuid>'

DECLARE @docHandle INT

EXEC sp_xml_preparedocument @docHandle OUTPUT,
     @doc

SELECT [guid]
FROM   OPENXML(@docHandle, '/ArrayOfGuid', 2)
       WITH
       ([guid] UNIQUEIDENTIFIER)

結果は 1 行だけです: 96EECBE2-D645-465D-8232-C7F21E3C6BF8

4行すべてが必要です。

4

2 に答える 2

1

SQL Server 2005 以降のネイティブ XQuery 機能を使用して、このアプローチを使用することもできます。

SELECT
    Guids.value('(.)[1]', 'uniqueidentifier')
FROM 
    @doc.nodes('/ArrayOfGuid/guid') AS XTbl(Guids)

私は常に古いOPENQUERYアプローチよりもこの方法を好みます

于 2012-12-27T08:50:09.360 に答える
1

これを行うためのより良い方法があるかもしれませんが、ここではそのうちの 1 つを示します。

SELECT text as guid
FROM   OPENXML(@docHandle, '//ArrayOfGuid/guid/text()', 2)
于 2012-12-27T06:14:51.937 に答える