Juste une petite piqure de rappel.

Comment lire un champ de type varchar (ou ntext) sous SQL SERVEUR 2000 qui est en fait du XML ?

--  Version SQL 2000
Declare @tmp varchar(3000);

--Exemple de ce que doit contenir notre champ XML en entree
Select @tmp = '<colonnes version="1.0">' +
'<colonne code="faaPrecedentN_1" type="5" obligatoire="1" derivee="1" /> ' +
'<colonne code="faaDestiPrecedentN_1" type="1" obligatoire="1" derivee="1" />' +
'</colonnes>';

DECLARE @Pointer INT
EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@tmp 

Select code, [type], obligatoire, derivee From
OPENXML (@Pointer,'/colonnes/colonne')
      WITH (code varchar(50), [type] int,  obligatoire bit, derivee Bit) 

EXEC sp_xml_removedocument @Pointer

Comment faire la même opération sous SQL SERVEUR 2005, mais cette fois ci avec un vrai champ XML (et l'utilisation de XPATH)

--  Version SQL 2005
Declare @xml xml;

--Exemple de ce que doit contenir notre champ XML en entre9e
Select @xml = '<colonnes version="1.0">' +
'<colonne code="faaPrecedentN_1" type="5" obligatoire="1" derivee="1" /> ' +
'<colonne code="faaDestiPrecedentN_1" type="1" obligatoire="1" derivee="1" />' +
'</colonnes>';

With CTE_Tmp(Code, [Type], Obligatoire, Derivee) as
(Select R.Colonne.value('@code', 'varchar(50)'),
R.Colonne.value('@type', 'bit'),
R.Colonne.value('@obligatoire', 'bit'),
R.Colonne.value('@derivee', 'bit')
from @xml.nodes('/colonnes/colonne') as R(Colonne))

Select * from CTE_Tmp

Vous aurez noté l'utilisation d'une CTE n'est ce pas smile_wink C'est pas obligatoire, mais ça fait joli !