OVH Cloud OVH Cloud

Requete sur un flux XML > 8000 carateres

2 réponses
Avatar
Eric
/* ;-)
Bonjour,

j'utilise "sp_xml_preparedocument" et "OPENXML" pour faire des requêtes à
partir de données XML. Cela donne quelque chose du genre :
*/
-----------------------------------------------------------------
-- fichier XML à lire
-----------------------------------------------------------------
declare @xmlfile varchar(255)
set @xmlfile = 'C:\Customers.xml'

-----------------------------------------------------------------
-- recup. du contenu du fichier XML
-----------------------------------------------------------------
DECLARE @doc varchar(8000)
create table #txml (xml_data text)
truncate table #txml

exec(
'BULK INSERT #txml FROM ''' + @xmlfile + ''' ' +
' WITH (
FIELDTERMINATOR = '''',
ROWTERMINATOR = ''''
) '
)

select @doc = xml_data from #txml
drop table #txml
-----------------------------------------------------------------


-----------------------------------------------------------------
-- handle local du doc XML
-----------------------------------------------------------------
DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-----------------------------------------------------------------


-----------------------------------------------------------------
-- SELECT avec OPENXML
-----------------------------------------------------------------
SELECT * FROM OPENXML (@idoc, '/ROOT/Customer', 2)
WITH (
CustomerID varchar(10),
CustomerName varchar(255)
)
-----------------------------------------------------------------


-----------------------------------------------------------------
-- suppr. du handle local
-----------------------------------------------------------------
EXEC sp_xml_removedocument @idoc
-----------------------------------------------------------------

/*
voila, ça marche, ... mais pas si le fichier XML dépasse une certaine
taille. En fait je suis limité à cause de la variable @doc qui est déclarée
comme varchar(8000). Je n'ai pas trouvé de solution pour pouvoir lire des
fichiers XML dépassant 8 Ko.

Quelqu'un a t-il une idée ?

Merci d'avance,
Eric
*/

2 réponses

Avatar
Alain
Et en essayant avec un type Text ?

Alain

"Eric" wrote in message
news:40d996c9$0$21501$
/* ;-)
Bonjour,

j'utilise "sp_xml_preparedocument" et "OPENXML" pour faire des requêtes à
partir de données XML. Cela donne quelque chose du genre :
*/
-----------------------------------------------------------------
-- fichier XML à lire
-----------------------------------------------------------------
declare @xmlfile varchar(255)
set @xmlfile = 'C:Customers.xml'

-----------------------------------------------------------------
-- recup. du contenu du fichier XML
-----------------------------------------------------------------
DECLARE @doc varchar(8000)
create table #txml (xml_data text)
truncate table #txml

exec(
'BULK INSERT #txml FROM ''' + @xmlfile + ''' ' +
' WITH (
FIELDTERMINATOR = '''',
ROWTERMINATOR = ''''
) '
)

select @doc = xml_data from #txml
drop table #txml
-----------------------------------------------------------------


-----------------------------------------------------------------
-- handle local du doc XML
-----------------------------------------------------------------
DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-----------------------------------------------------------------


-----------------------------------------------------------------
-- SELECT avec OPENXML
-----------------------------------------------------------------
SELECT * FROM OPENXML (@idoc, '/ROOT/Customer', 2)
WITH (
CustomerID varchar(10),
CustomerName varchar(255)
)
-----------------------------------------------------------------


-----------------------------------------------------------------
-- suppr. du handle local
-----------------------------------------------------------------
EXEC sp_xml_removedocument @idoc
-----------------------------------------------------------------

/*
voila, ça marche, ... mais pas si le fichier XML dépasse une certaine
taille. En fait je suis limité à cause de la variable @doc qui est


déclarée
comme varchar(8000). Je n'ai pas trouvé de solution pour pouvoir lire des
fichiers XML dépassant 8 Ko.

Quelqu'un a t-il une idée ?

Merci d'avance,
Eric
*/








Avatar
Eric
j'ai essayé, mais j'obtiens :

Serveur : Msg 2739, Niveau 16, État 1, Ligne 2
Les types de données text, ntext et image sont interdits dans les variables
locales.

Une autre méthode serait la suivante :
http://sqlxml.org/faqs.aspx?faqB
mais je ne l'ai pas encore testée, je préfèrerais trouver quelque chose de
plus simple, donc je continue à chercher.

Eric



"Alain" a écrit dans le message de
news:
Et en essayant avec un type Text ?

Alain

"Eric" wrote in message
news:40d996c9$0$21501$
> /* ;-)
> Bonjour,
>
> j'utilise "sp_xml_preparedocument" et "OPENXML" pour faire des requêtes


à
> partir de données XML. Cela donne quelque chose du genre :
> */
> -----------------------------------------------------------------
> -- fichier XML à lire
> -----------------------------------------------------------------
> declare @xmlfile varchar(255)
> set @xmlfile = 'C:Customers.xml'
>
> -----------------------------------------------------------------
> -- recup. du contenu du fichier XML
> -----------------------------------------------------------------
> DECLARE @doc varchar(8000)
> create table #txml (xml_data text)
> truncate table #txml
>
> exec(
> 'BULK INSERT #txml FROM ''' + @xmlfile + ''' ' +
> ' WITH (
> FIELDTERMINATOR = '''',
> ROWTERMINATOR = ''''
> ) '
> )
>
> select @doc = xml_data from #txml
> drop table #txml
> -----------------------------------------------------------------
>
>
> -----------------------------------------------------------------
> -- handle local du doc XML
> -----------------------------------------------------------------
> DECLARE @idoc int
> EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
> -----------------------------------------------------------------
>
>
> -----------------------------------------------------------------
> -- SELECT avec OPENXML
> -----------------------------------------------------------------
> SELECT * FROM OPENXML (@idoc, '/ROOT/Customer', 2)
> WITH (
> CustomerID varchar(10),
> CustomerName varchar(255)
> )
> -----------------------------------------------------------------
>
>
> -----------------------------------------------------------------
> -- suppr. du handle local
> -----------------------------------------------------------------
> EXEC sp_xml_removedocument @idoc
> -----------------------------------------------------------------
>
> /*
> voila, ça marche, ... mais pas si le fichier XML dépasse une certaine
> taille. En fait je suis limité à cause de la variable @doc qui est
déclarée
> comme varchar(8000). Je n'ai pas trouvé de solution pour pouvoir lire


des
> fichiers XML dépassant 8 Ko.
>
> Quelqu'un a t-il une idée ?
>
> Merci d'avance,
> Eric
> */
>
>
>
>
>
>