答えて

0

多分それはあなたを助ける:

DECLARE @xmls TABLE 
(
    Id INT IDENTITY(1,1), 
    Data XML 
) 

DECLARE @namespaces TABLE 
(
    IdXml INT 
, NamespaceVal XML 
) 


INSERT INTO @xmls 
(
    Data 
) 
SELECT 
' 
<x:parent xmlns:x="http://temp.temp.org/x/x/" xmlns:y="http://temp.temp.org/y/y/" xmlns:z="http://temp.temp.org/z/z/"> 
    <z:child1> 
     <val>zzz</val> 
    </z:child1> 
    <y:child2> 
     <val>yyy</val> 
    </y:child2> 
    <x:child3> 
     <val>zzz</val> 
    </x:child3> 
</x:parent> 
' 

INSERT INTO @namespaces 
(
    IdXml,NamespaceVal 
) 


SELECT t.id, 
      t.Data.query(' 
      for $node in /descendant::node()[namespace-uri() != ""] 
      return <namespace>{ namespace-uri($node) }</namespace>' 
        ) AS nodes 
FROM  @xmls t 


SELECT --DISTINCT 
     x.IdXml 
    , na.na.value('.', 'VARCHAR(1000)') namespace 
FROM @namespaces x 
     CROSS APPLY x.NamespaceVal.nodes('/') AS n(n) 
     CROSS APPLY n.n.nodes('./namespace') AS na(na)