OVH Cloud OVH Cloud

question transact-sql

5 réponses
Avatar
Sebho
Bonjour,

quelle serait la syntaxe pour passer à une procédure stockée un liste de
paramètres comme ceci avec un des paramètres qui serait un tableau ?

@DateDebut
@DateFin
@Pays

SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'

Je voudrais pouvoir placer x pays dans la variable @Pays , les variables
peuvent elles être un tableau @Pays()
faut il concaténer un truc du style

........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
............

comment connaitre le nombre d'éléments dans le tableau ?

ou alors plutot

........AND (MonChampPays IN @Pays)

comment doit etre renseignée la variable Pays alors ? EXECUTE MyStroredProc
'01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????

quelle est la bonne méthode

merci bcp pour votre aide
Seb

5 réponses

Avatar
Fred BROUARD
deux solutions :
construire une table temporaire locale et y palcer tous les pays puis joindre
cette table dans la requête :

Au passage on ne parle pas de champ mais de colonnes !

En plus, mieux vaut le BETWEEN

SELECT *
FROM MyTable T
INNER JOIN MaTableTemporairePays P
ON T.MaColonnePays = P.MaColonnePays
WHERE MaColonneDate BETWEEN @DateDebut AND @DateFin


sinon, utiliser du SQL dynamique (moins performant)

A +

Sebho a écrit:
Bonjour,

quelle serait la syntaxe pour passer à une procédure stockée un liste de
paramètres comme ceci avec un des paramètres qui serait un tableau ?

@DateDebut
@DateFin
@Pays

SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'

Je voudrais pouvoir placer x pays dans la variable @Pays , les variables
peuvent elles être un tableau @Pays()
faut il concaténer un truc du style

........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
............

comment connaitre le nombre d'éléments dans le tableau ?

ou alors plutot

........AND (MonChampPays IN @Pays)

comment doit etre renseignée la variable Pays alors ? EXECUTE MyStroredProc
'01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????

quelle est la bonne méthode

merci bcp pour votre aide
Seb





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
F.S
Deux autre solutions ;
- une c'est de mettre le recordset dans une table temporaire globale ##MyTab
et l'interroger à l'interieur de la procedure.
- et l'autre c'est de mettre le RecordSet dans une chaine XML avec la clause
FOR XML et passer la chaine XML à la procedure ensuite l'interroger avec
OPENXML.
F.S

"Fred BROUARD" a écrit :

deux solutions :
construire une table temporaire locale et y palcer tous les pays puis joindre
cette table dans la requête :

Au passage on ne parle pas de champ mais de colonnes !

En plus, mieux vaut le BETWEEN

SELECT *
FROM MyTable T
INNER JOIN MaTableTemporairePays P
ON T.MaColonnePays = P.MaColonnePays
WHERE MaColonneDate BETWEEN @DateDebut AND @DateFin


sinon, utiliser du SQL dynamique (moins performant)

A +

Sebho a écrit:
> Bonjour,
>
> quelle serait la syntaxe pour passer à une procédure stockée un liste de
> paramètres comme ceci avec un des paramètres qui serait un tableau ?
>
> @DateDebut
> @DateFin
> @Pays
>
> SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
> MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'
>
> Je voudrais pouvoir placer x pays dans la variable @Pays , les variables
> peuvent elles être un tableau @Pays()
> faut il concaténer un truc du style
>
> ........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
> ............
>
> comment connaitre le nombre d'éléments dans le tableau ?
>
> ou alors plutot
>
> ........AND (MonChampPays IN @Pays)
>
> comment doit etre renseignée la variable Pays alors ? EXECUTE MyStroredProc
> '01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????
>
> quelle est la bonne méthode
>
> merci bcp pour votre aide
> Seb
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************




Avatar
Steve Kass
Seb,

Il existe quelques solutions très efficaces sans besoin de SQL
dynamique, sans besoin d'une table temporaire:

Voilà quelques liens (en anglais)
http://www.sommarskog.se/arrays-in-sql.html
http://users.drew.edu/skass/sql/ListToTableFunction.sql.txt
http://users.drew.edu/skass/sql/ListToTableProc.sql.txt

Steve Kass
Drew University

Sebho wrote:

Bonjour,

quelle serait la syntaxe pour passer à une procédure stockée un liste de
paramètres comme ceci avec un des paramètres qui serait un tableau ?

@DateDebut
@DateFin
@Pays

SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'

Je voudrais pouvoir placer x pays dans la variable @Pays , les variables
peuvent elles être un tableau @Pays()
faut il concaténer un truc du style

........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
............

comment connaitre le nombre d'éléments dans le tableau ?

ou alors plutot

........AND (MonChampPays IN @Pays)

comment doit etre renseignée la variable Pays alors ? EXECUTE MyStroredProc
'01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????

quelle est la bonne méthode

merci bcp pour votre aide
Seb






Avatar
News Groups
Je viens de consulter ces liens très interressants,
but my english is so...!!! ;-)
Donc je cherche des sites équivalents en français,
à l'extrême.. aucune traduction existante de ces pages... ???

Merci pour toutes infos,

Thierry.

"Steve Kass" a écrit dans le message de news:
#
Seb,

Il existe quelques solutions très efficaces sans besoin de SQL
dynamique, sans besoin d'une table temporaire:

Voilà quelques liens (en anglais)
http://www.sommarskog.se/arrays-in-sql.html
http://users.drew.edu/skass/sql/ListToTableFunction.sql.txt
http://users.drew.edu/skass/sql/ListToTableProc.sql.txt

Steve Kass
Drew University

Sebho wrote:

>Bonjour,
>
>quelle serait la syntaxe pour passer à une procédure stockée un liste de
>paramètres comme ceci avec un des paramètres qui serait un tableau ?
>
>@DateDebut
>@DateFin
>@Pays
>
>SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
>MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'
>
>Je voudrais pouvoir placer x pays dans la variable @Pays , les variables
>peuvent elles être un tableau @Pays()
>faut il concaténer un truc du style
>
>........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
>............
>
>comment connaitre le nombre d'éléments dans le tableau ?
>
>ou alors plutot
>
>........AND (MonChampPays IN @Pays)
>
>comment doit etre renseignée la variable Pays alors ? EXECUTE


MyStroredProc
>'01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????
>
>quelle est la bonne méthode
>
>merci bcp pour votre aide
>Seb
>
>
>
>


Avatar
News Groups
je me permet de relancer le post
au cas où ..?

Merci,
Thierry.

"News Groups" a écrit dans le message de news:
416d2598$0$7835$
Je viens de consulter ces liens très interressants,
but my english is so...!!! ;-)
Donc je cherche des sites équivalents en français,
à l'extrême.. aucune traduction existante de ces pages... ???

Merci pour toutes infos,

Thierry.

"Steve Kass" a écrit dans le message de news:
#
> Seb,
>
> Il existe quelques solutions très efficaces sans besoin de SQL
> dynamique, sans besoin d'une table temporaire:
>
> Voilà quelques liens (en anglais)
> http://www.sommarskog.se/arrays-in-sql.html
> http://users.drew.edu/skass/sql/ListToTableFunction.sql.txt
> http://users.drew.edu/skass/sql/ListToTableProc.sql.txt
>
> Steve Kass
> Drew University
>
> Sebho wrote:
>
> >Bonjour,
> >
> >quelle serait la syntaxe pour passer à une procédure stockée un liste


de
> >paramètres comme ceci avec un des paramètres qui serait un tableau ?
> >
> >@DateDebut
> >@DateFin
> >@Pays
> >
> >SELECT * FROM MyTable WHERE MonChampDate>=@DateDebut AND
> >MonChampDate<=@DateFin AND MonChampPays LIKE '@Pays'
> >
> >Je voudrais pouvoir placer x pays dans la variable @Pays , les


variables
> >peuvent elles être un tableau @Pays()
> >faut il concaténer un truc du style
> >
> >........AND (MonChampPays Like @pays(0) or MonChampPays Like @pays(1))
> >............
> >
> >comment connaitre le nombre d'éléments dans le tableau ?
> >
> >ou alors plutot
> >
> >........AND (MonChampPays IN @Pays)
> >
> >comment doit etre renseignée la variable Pays alors ? EXECUTE
MyStroredProc
> >'01-01-2004', '01/01/2005', 'FRANCE,ALLEMAGNE,BELGIQUE' ????
> >
> >quelle est la bonne méthode
> >
> >merci bcp pour votre aide
> >Seb
> >
> >
> >
> >