как сделать XQuery - TSQL - PullRequest
       2

как сделать XQuery - TSQL

1 голос
/ 04 октября 2011

Я получил этот XML.

<ArrayOfGuid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <guid>475B07C8-CDEA-4000-BAAE-485336190E10</guid>
     <guid>6E5B87BC-CF80-4AB2-939E-ED951FA604AB</guid>
     <guid>31BFDA60-3BB2-49DC-8C69-10F6E1B540CA</guid>
</ArrayOfGuid>

Нужно получить результаты вроде

BatchGUID
475B07C8-CDEA-4000-BAAE-485336190E10
6E5B87BC-CF80-4AB2-939E-ED951FA604AB
31BFDA60-3BB2-49DC-8C69-10F6E1B540CA

Каким-то образом я застрял с

DECLARE @BatchGUID XML

SET @BatchGUID = '<ArrayOfGuid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                      <guid>475B07C8-CDEA-4000-BAAE-485336190E10</guid>
                      <guid>6E5B87BC-CF80-4AB2-939E-ED951FA604AB</guid>
                      <guid>31BFDA60-3BB2-49DC-8C69-10F6E1B540CA</guid>
                    </ArrayOfGuid>'

DECLARE @t_xml TABLE
(
    BatchGUID XML
)

INSERT INTO @t_xml
SELECT @BatchGUID

SELECT C.* FROM @t_xml
cross apply (select name.value('guid[1]', 'uniqueidentifier') as [BatchGUID] 
from BatchGUID.nodes('//ArrayOfGuid/guid') as c(name)) as C

Это возвращает меня

BatchGUID
NULL
NULL
NULL

Нужно знать, что я здесь не так делаю.

Спасибо,

1 Ответ

1 голос
/ 04 октября 2011

Вы очень близки!

Ваша проблема в том, что вы выбираете значение узла guid[1] внутри узла guid.Конечно, узел guid не содержит дочерних элементов - вы хотите выбрать значение самого узла (которое выражается как .)

SELECT C.* FROM @t_xml
cross apply (select name.value('.', 'uniqueidentifier') as [BatchGUID]
from @BatchGUID.nodes('//ArrayOfGuid/guid') as c(name)) as C
...