Sélection de données XML à partir d'une requête SQL – Aucune valeur renvoyée

La colonne Xml ne renvoie aucune ligne.
Ci-dessous créé un type de table et une valeur xml insérés dans cette table. Après l'exécution des deux requêtes mentionnées ci-dessous, aucune valeur n'est renvoyée.
Les données Xml sont des données valides.

DECLARE @Test TABLE (Id INT IDENTITY (1,1), XMLDATA XML) INSERT INTO @test SELECT ' <TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00"> <TXLifeRequest PrimaryObjectID="Holding_1"> <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID> </TXLifeRequest> </TXLife>' SELECT Id , XMLDATA.query('//CorrelationGUID') AS 'TransType' , XMLDATA FROM @test SELECT C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType' FROM @test CROSS APPLY XMLDATA.nodes('/TXLife/TXLifeRequest') n (C) 

Eh bien, si je teste votre code avec CREATE TABLE , ici et ici , la sélection non filtrée fonctionne très bien. Cependant, la seconde sélection filtrée ne renvoie aucun résultat.

Si je modifie la requête pour spécifier le bon espace de noms, comme dans la réponse de @Devart ,

 WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2') SELECT C.value('./CorrelationGUID[1]', 'varchar(50)') AS 'TransType' FROM Test CROSS APPLY XMLDATA.nodes('/TXLife/TXLifeRequest') n (C) 

Vous pouvez voir, cela fonctionne comme prévu .

Essaye celui-là –

 DECLARE @XML XML SELECT @XML = ' <TXLife xmlns="http://ACORD.org/Standards/Life/2" xmlns:tx="http://ACORD.org/Standards/Life/2" Version="2.20.00"> <TXLifeRequest PrimaryObjectID="Holding_1"> <CorrelationGUID>4b30545a-158b-441a-a37a-0b259f757059</CorrelationGUID> </TXLifeRequest> </TXLife>' ;WITH XMLNAMESPACES (DEFAULT 'http://ACORD.org/Standards/Life/2') SELECT tcvalue('CorrelationGUID[1]', 'UNIQUEIDENTIFIER') FROM @XML.nodes('//TXLifeRequest') t(c) 

Sortie –

 ------------------------------------ 4B30545A-158B-441A-A37A-0B259F757059 

Vous devez déclarer l'espace de noms. Essaye ça:

 SELECT XMLDATA.value('declare namespace L="http://ACORD.org/Standards/Life/2";(//L:CorrelationGUID)[1]', 'UNIQUEIDENTIFIER') AS 'TransType' FROM @test UNION ALL SELECT C.value('declare namespace L="http://ACORD.org/Standards/Life/2";(./L:CorrelationGUID)[1]', 'UNIQUEIDENTIFIER') AS 'TransType' FROM @test CROSS APPLY XMLDATA.nodes('declare namespace L="http://ACORD.org/Standards/Life/2";/L:TXLife/L:TXLifeRequest') N(C) 

Voir le travail ici .