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
C'est pas obligatoire, mais ça fait joli !