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
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 *************************
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 *************************
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 *************************
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
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)-@thepos)
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
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
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 *************************
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)-@thepos)
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 *************************
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 *************************
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
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" <anonymous@discussions.microsoft.com> wrote in message
news:9eb001c486c7$bb4212e0$a401280a@phx.gbl...
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)