OVH Cloud OVH Cloud

Procedures sotckees

4 réponses
Avatar
Nico
Bonjour,

Je voudrais utiliser la liste d'un "in" en parametre de
ma procedure stockee mais cela ne marche pas

create procedure [maproc] @maselection nvarchar(100) as
select * from matable where monchamp in (maselection)

Si queqlu'un pouvait m'aider
D'avance merci

4 réponses

Avatar
Fred BROUARD
un paramétre ne peut être spécifié que parce qu'il remplace une valeur dans un
membre d'une expression évaluable. Or le contenur de IN n'est pas une valeur
mais un ensemble de valeur. On ne peut donc pas passer le contenu d'un IN en
paramètre.

En revanche c'est faisable avec du SQL dynamique.

A +

Nico a écrit:
Bonjour,

Je voudrais utiliser la liste d'un "in" en parametre de
ma procedure stockee mais cela ne marche pas

create procedure [maproc] @maselection nvarchar(100) as
select * from matable where monchamp in (maselection)

Si queqlu'un pouvait m'aider
D'avance merci



--
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
Jacques PYRAT
Fred BROUARD wrote:
un paramétre ne peut être spécifié que parce qu'il remplace une
valeur dans un membre d'une expression évaluable. Or le contenur de
IN n'est pas une valeur mais un ensemble de valeur. On ne peut donc
pas passer le contenu d'un IN en paramètre.

En revanche c'est faisable avec du SQL dynamique.


C'est aussi faisable avec une fonction utilisateur (à partir de SQL 2000)
http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
http://www.4guysfromrolla.com/webtech/031004-1.shtml

Personnellement, j'utilise cette fonction :
CREATE FUNCTION FctList2Table (@thereps varchar(255))
RETURNS @t table(reps int) AS
BEGIN
Declare @thepos int
Declare @thevalue int
while len(@thereps)>0
begin
set @thepos = charindex(';',@thereps)
if @thepos>0
begin
set @thevalue = left(@thereps,@thepos-1)
set @thereps = substring(@thereps,@thepos+1,len(@thereps))
end
else
begin
set @thevalue = @thereps
set @thereps = ''
end
insert @t values(@thevalue)
end
return
END


Et l'appel se fait ainsi : IN (select * from FctList2Table('10;20;15'))
Cordialement,
--
Jacques PYRAT - www.pyrat.net - Services de création de sites avec SPIP
Avatar
Fred BROUARD
bonjour les performances et le temps d'exécution !!!

A +

Jacques PYRAT a écrit:
Fred BROUARD wrote:

un paramétre ne peut être spécifié que parce qu'il remplace une
valeur dans un membre d'une expression évaluable. Or le contenur de
IN n'est pas une valeur mais un ensemble de valeur. On ne peut donc
pas passer le contenu d'un IN en paramètre.

En revanche c'est faisable avec du SQL dynamique.



C'est aussi faisable avec une fonction utilisateur (à partir de SQL 2000)
http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
http://www.4guysfromrolla.com/webtech/031004-1.shtml

Personnellement, j'utilise cette fonction :
CREATE FUNCTION FctList2Table (@thereps varchar(255))
RETURNS @t table(reps int) AS
BEGIN
Declare @thepos int
Declare @thevalue int
while len(@thereps)>0
begin
set @thepos = charindex(';',@thereps)
if @thepos>0
begin
set @thevalue = left(@thereps,@thepos-1)
set @thereps = substring(@thereps,@thepos+1,len(@thereps))
end
else
begin
set @thevalue = @thereps
set @thereps = ''
end
insert @t values(@thevalue)
end
return
END


Et l'appel se fait ainsi : IN (select * from FctList2Table('10;20;15'))
Cordialement,



--
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
bruno reiter [MVP]
a priori je ne vois pas de raison de le passer en paramètre puisque tu peux
l'avoir dans le corps de la proc.

peux-tu etre plus précis sur ce que tu veux faire?

br

"Nico" wrote in message
news:9eb001c486c7$bb4212e0$
Bonjour,

Je voudrais utiliser la liste d'un "in" en parametre de
ma procedure stockee mais cela ne marche pas

create procedure [maproc] @maselection nvarchar(100) as
select * from matable where monchamp in (maselection)

Si queqlu'un pouvait m'aider
D'avance merci