Je recherche le meilleur moyen de passer une liste de valeurs d'une appli
cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test
@Xml text
AS
DECLARE @hDoc int
EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml
SELECT Customers.*
FROM Customers
JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste
ON Customers.CustomerID = liste.id
EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en utilisant
de simples données textes (avec délimiteurs TAB, CRLF...) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bouarroudj Mohamed
Generalement les gens utilise un delimited text, tu peux utiliser une fonction (UDF) qui recoit comme param un delimited text et retourne une table, cette UDF sera utilisé par vos procédure stockée pour parser le text, sur le net il y'a plusieurs exemples, voici un : http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" wrote in message news:
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test @Xml text AS DECLARE @hDoc int EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml SELECT Customers.* FROM Customers JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste ON Customers.CustomerID = liste.id EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
-- Thierry
Generalement les gens utilise un delimited text, tu peux utiliser une
fonction (UDF) qui recoit comme param un delimited text et retourne une
table, cette UDF sera utilisé par vos procédure stockée pour parser le text,
sur le net il y'a plusieurs exemples, voici un :
http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" <tper_NOSPAM@vfemail.net> wrote in message
news:edkrVfruFHA.4020@TK2MSFTNGP12.phx.gbl...
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli
cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test
@Xml text
AS
DECLARE @hDoc int
EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml
SELECT Customers.*
FROM Customers
JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste
ON Customers.CustomerID = liste.id
EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en
utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
Generalement les gens utilise un delimited text, tu peux utiliser une fonction (UDF) qui recoit comme param un delimited text et retourne une table, cette UDF sera utilisé par vos procédure stockée pour parser le text, sur le net il y'a plusieurs exemples, voici un : http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" wrote in message news:
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test @Xml text AS DECLARE @hDoc int EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml SELECT Customers.* FROM Customers JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste ON Customers.CustomerID = liste.id EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
-- Thierry
Thierry
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la plus performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news:
Generalement les gens utilise un delimited text, tu peux utiliser une fonction (UDF) qui recoit comme param un delimited text et retourne une table, cette UDF sera utilisé par vos procédure stockée pour parser le text, sur le net il y'a plusieurs exemples, voici un : http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" wrote in message news:
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test @Xml text AS DECLARE @hDoc int EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml SELECT Customers.* FROM Customers JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste ON Customers.CustomerID = liste.id EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
-- Thierry
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la plus
performante.
--
Thierry
"Bouarroudj Mohamed" <mbouarroudj@yahoo.com> a écrit dans le message de
news: OmWRNLsuFHA.3528@TK2MSFTNGP15.phx.gbl...
Generalement les gens utilise un delimited text, tu peux utiliser une
fonction (UDF) qui recoit comme param un delimited text et retourne une
table, cette UDF sera utilisé par vos procédure stockée pour parser le
text, sur le net il y'a plusieurs exemples, voici un :
http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" <tper_NOSPAM@vfemail.net> wrote in message
news:edkrVfruFHA.4020@TK2MSFTNGP12.phx.gbl...
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli
cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test
@Xml text
AS
DECLARE @hDoc int
EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml
SELECT Customers.*
FROM Customers
JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste
ON Customers.CustomerID = liste.id
EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en
utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la plus performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news:
Generalement les gens utilise un delimited text, tu peux utiliser une fonction (UDF) qui recoit comme param un delimited text et retourne une table, cette UDF sera utilisé par vos procédure stockée pour parser le text, sur le net il y'a plusieurs exemples, voici un : http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Thierry" wrote in message news:
Bonjour,
Je recherche le meilleur moyen de passer une liste de valeurs d'une appli cliente à une procédure stockée afin d'extraire des données.
J'ai trouvé cette solution en passant les données au format XML:
CREATE PROCEDURE test @Xml text AS DECLARE @hDoc int EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml SELECT Customers.* FROM Customers JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste ON Customers.CustomerID = liste.id EXECUTE sp_xml_removedocument @hDoc
Y a t-il un moyen équivalent et au moins aussi performant, mais en utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
-- Thierry
mark
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode est la plus performante ?
Merci
"Thierry" wrote in message news:
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news: > Generalement les gens utilise un delimited text, tu peux utiliser une > fonction (UDF) qui recoit comme param un delimited text et retourne une > table, cette UDF sera utilisé par vos procédure stockée pour parser le > text, sur le net il y'a plusieurs exemples, voici un : > http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm > > > "Thierry" wrote in message > news: >> Bonjour, >> >> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données. >> >> J'ai trouvé cette solution en passant les données au format XML: >> >> CREATE PROCEDURE test >> @Xml text >> AS >> DECLARE @hDoc int >> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml >> SELECT Customers.* >> FROM Customers >> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste >> ON Customers.CustomerID = liste.id >> EXECUTE sp_xml_removedocument @hDoc >> >> Y a t-il un moyen équivalent et au moins aussi performant, mais en >> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ? >> >> -- >> Thierry >> > >
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode est
la plus performante ?
Merci
"Thierry" <tper_NOSPAM@vfemail.net> wrote in message
news:eKFRqDtuFHA.3452@TK2MSFTNGP14.phx.gbl...
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
--
Thierry
"Bouarroudj Mohamed" <mbouarroudj@yahoo.com> a écrit dans le message de
news: OmWRNLsuFHA.3528@TK2MSFTNGP15.phx.gbl...
> Generalement les gens utilise un delimited text, tu peux utiliser une
> fonction (UDF) qui recoit comme param un delimited text et retourne une
> table, cette UDF sera utilisé par vos procédure stockée pour parser le
> text, sur le net il y'a plusieurs exemples, voici un :
> http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
>
>
> "Thierry" <tper_NOSPAM@vfemail.net> wrote in message
> news:edkrVfruFHA.4020@TK2MSFTNGP12.phx.gbl...
>> Bonjour,
>>
>> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données.
>>
>> J'ai trouvé cette solution en passant les données au format XML:
>>
>> CREATE PROCEDURE test
>> @Xml text
>> AS
>> DECLARE @hDoc int
>> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml
>> SELECT Customers.*
>> FROM Customers
>> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste
>> ON Customers.CustomerID = liste.id
>> EXECUTE sp_xml_removedocument @hDoc
>>
>> Y a t-il un moyen équivalent et au moins aussi performant, mais en
>> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
>>
>> --
>> Thierry
>>
>
>
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode est la plus performante ?
Merci
"Thierry" wrote in message news:
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news: > Generalement les gens utilise un delimited text, tu peux utiliser une > fonction (UDF) qui recoit comme param un delimited text et retourne une > table, cette UDF sera utilisé par vos procédure stockée pour parser le > text, sur le net il y'a plusieurs exemples, voici un : > http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm > > > "Thierry" wrote in message > news: >> Bonjour, >> >> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données. >> >> J'ai trouvé cette solution en passant les données au format XML: >> >> CREATE PROCEDURE test >> @Xml text >> AS >> DECLARE @hDoc int >> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml >> SELECT Customers.* >> FROM Customers >> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste >> ON Customers.CustomerID = liste.id >> EXECUTE sp_xml_removedocument @hDoc >> >> Y a t-il un moyen équivalent et au moins aussi performant, mais en >> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ? >> >> -- >> Thierry >> > >
Pascal
"Thierry" wrote in message news:
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la plus performante.
Pour ma part j'utilise une UDF depuis 2001 pour faire ce genre de boulot, je trouve plus pratique ET plus performant. Mais je suis ouvert s'il existe une meilleure solution. Version 2005 ? Bien que je me demande ce qui peut être plus rapide qu'une bête boucle en SQL pour ce genre de requête.
Pascal
"Thierry" <tper_NOSPAM@vfemail.net> wrote in message
news:eKFRqDtuFHA.3452@TK2MSFTNGP14.phx.gbl...
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus performante.
Pour ma part j'utilise une UDF depuis 2001 pour faire ce genre de boulot, je
trouve plus pratique ET plus performant. Mais je suis ouvert s'il existe une
meilleure solution. Version 2005 ?
Bien que je me demande ce qui peut être plus rapide qu'une bête boucle en
SQL pour ce genre de requête.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la plus performante.
Pour ma part j'utilise une UDF depuis 2001 pour faire ce genre de boulot, je trouve plus pratique ET plus performant. Mais je suis ouvert s'il existe une meilleure solution. Version 2005 ? Bien que je me demande ce qui peut être plus rapide qu'une bête boucle en SQL pour ce genre de requête.
Pascal
Thierry
Bonjour,
Avec un test portant sur 800 valeurs à envoyées à Sql Server, la solution d'une UDF est 2 fois plus performante que le OpenXml(). (environ 0.2s contre 0.4s)
Simple requête du style :
Select count(*) from Lignes join Split_n_contrat(?) liste on Lignes.n_contrat =liste.n_contrat
Avec des jointures plus compliqués, la différence de performance n'est pas perceptible.
Reste un avantage du XML, c'est qu'à la fois coté client (Visual Foxpro) ou Serveur, je n'est pas à écrire de fonction spécifique pour faire la transformation des données (table<-->chaîne XML), elles existent déjà en standard.
Il reste un problème éventuel avec l'UDF. Varchar est limité à 8000 caractères (mais ça devrait me suffire), et on ne peut pas utiliser d'arguments de type Text dans des fonctions comme ltrim() ou replace().
-- Thierry
"mark" a écrit dans le message de news:
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode est la plus performante ?
Merci
"Thierry" wrote in message news:
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news: > Generalement les gens utilise un delimited text, tu peux utiliser une > fonction (UDF) qui recoit comme param un delimited text et retourne une > table, cette UDF sera utilisé par vos procédure stockée pour parser le > text, sur le net il y'a plusieurs exemples, voici un : > http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm > > > "Thierry" wrote in message > news: >> Bonjour, >> >> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données. >> >> J'ai trouvé cette solution en passant les données au format XML: >> >> CREATE PROCEDURE test >> @Xml text >> AS >> DECLARE @hDoc int >> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml >> SELECT Customers.* >> FROM Customers >> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste >> ON Customers.CustomerID = liste.id >> EXECUTE sp_xml_removedocument @hDoc >> >> Y a t-il un moyen équivalent et au moins aussi performant, mais en >> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ? >> >> -- >> Thierry >> > >
Bonjour,
Avec un test portant sur 800 valeurs à envoyées à Sql Server, la solution
d'une UDF est 2 fois plus performante que le OpenXml().
(environ 0.2s contre 0.4s)
Simple requête du style :
Select count(*)
from Lignes
join Split_n_contrat(?) liste on Lignes.n_contrat =liste.n_contrat
Avec des jointures plus compliqués, la différence de performance n'est pas
perceptible.
Reste un avantage du XML, c'est qu'à la fois coté client (Visual Foxpro) ou
Serveur, je n'est pas à écrire de fonction spécifique pour faire la
transformation des données (table<-->chaîne XML), elles existent déjà en
standard.
Il reste un problème éventuel avec l'UDF.
Varchar est limité à 8000 caractères (mais ça devrait me suffire), et on ne
peut pas utiliser d'arguments de type Text dans des fonctions comme ltrim()
ou replace().
--
Thierry
"mark" <mark@yahoo.com> a écrit dans le message de news:
uwmKsrtuFHA.3124@TK2MSFTNGP10.phx.gbl...
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode
est
la plus performante ?
Merci
"Thierry" <tper_NOSPAM@vfemail.net> wrote in message
news:eKFRqDtuFHA.3452@TK2MSFTNGP14.phx.gbl...
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
--
Thierry
"Bouarroudj Mohamed" <mbouarroudj@yahoo.com> a écrit dans le message de
news: OmWRNLsuFHA.3528@TK2MSFTNGP15.phx.gbl...
> Generalement les gens utilise un delimited text, tu peux utiliser une
> fonction (UDF) qui recoit comme param un delimited text et retourne une
> table, cette UDF sera utilisé par vos procédure stockée pour parser le
> text, sur le net il y'a plusieurs exemples, voici un :
> http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
>
>
> "Thierry" <tper_NOSPAM@vfemail.net> wrote in message
> news:edkrVfruFHA.4020@TK2MSFTNGP12.phx.gbl...
>> Bonjour,
>>
>> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données.
>>
>> J'ai trouvé cette solution en passant les données au format XML:
>>
>> CREATE PROCEDURE test
>> @Xml text
>> AS
>> DECLARE @hDoc int
>> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml
>> SELECT Customers.*
>> FROM Customers
>> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste
>> ON Customers.CustomerID = liste.id
>> EXECUTE sp_xml_removedocument @hDoc
>>
>> Y a t-il un moyen équivalent et au moins aussi performant, mais en
>> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ?
>>
>> --
>> Thierry
>>
>
>
Avec un test portant sur 800 valeurs à envoyées à Sql Server, la solution d'une UDF est 2 fois plus performante que le OpenXml(). (environ 0.2s contre 0.4s)
Simple requête du style :
Select count(*) from Lignes join Split_n_contrat(?) liste on Lignes.n_contrat =liste.n_contrat
Avec des jointures plus compliqués, la différence de performance n'est pas perceptible.
Reste un avantage du XML, c'est qu'à la fois coté client (Visual Foxpro) ou Serveur, je n'est pas à écrire de fonction spécifique pour faire la transformation des données (table<-->chaîne XML), elles existent déjà en standard.
Il reste un problème éventuel avec l'UDF. Varchar est limité à 8000 caractères (mais ça devrait me suffire), et on ne peut pas utiliser d'arguments de type Text dans des fonctions comme ltrim() ou replace().
-- Thierry
"mark" a écrit dans le message de news:
Fait nous partager vos conclusions, j'aimerai bien savoir quelle methode est la plus performante ?
Merci
"Thierry" wrote in message news:
Merci pour le lien.
J'ai essayé avec succès une UDF.
Il ne me reste plus qu'à choisir la solution la plus pratique et/ou la
plus
performante.
-- Thierry
"Bouarroudj Mohamed" a écrit dans le message de news: > Generalement les gens utilise un delimited text, tu peux utiliser une > fonction (UDF) qui recoit comme param un delimited text et retourne une > table, cette UDF sera utilisé par vos procédure stockée pour parser le > text, sur le net il y'a plusieurs exemples, voici un : > http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm > > > "Thierry" wrote in message > news: >> Bonjour, >> >> Je recherche le meilleur moyen de passer une liste de valeurs d'une
appli
>> cliente à une procédure stockée afin d'extraire des données. >> >> J'ai trouvé cette solution en passant les données au format XML: >> >> CREATE PROCEDURE test >> @Xml text >> AS >> DECLARE @hDoc int >> EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @Xml >> SELECT Customers.* >> FROM Customers >> JOIN OPENXML(@hDoc, 'VFPData/liste') WITH (id char(5)) liste >> ON Customers.CustomerID = liste.id >> EXECUTE sp_xml_removedocument @hDoc >> >> Y a t-il un moyen équivalent et au moins aussi performant, mais en >> utilisant de simples données textes (avec délimiteurs TAB, CRLF...) ? >> >> -- >> Thierry >> > >