XML sous Sql Serveur 2000 et Sql Serveur 2005
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 !