Mim

Select * from Seb where Sujets in (SQL Server 2008, ADO.NET, Visual Studio 2008)

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 smile_wink C'est pas obligatoire, mais ça fait joli !
Posted: oct. 02 2007, 06:47 par Mimetis | avec no comments
Classé sous :