J'ai une procédure stockée à laquelle je passe en paramètre le résultat d'un
traitement servant à connaitre les valeurs du IN de cette procédure.
En simplifiant, ma procédure est la suivante:
CREATE PROCEDURE [dbo].PocStock
@ID_List varchar(512)=NULL
AS
SELECT * FROM MaTAble
WHERE
MaTable_ID IN (@ID_List) OR @ID_List IS NULL
return 0
GO
Le problème étant que quand je passe à @ID_List plusieur valeur séparé par
une virgule (20,3,17 par ex.), j'obtient l'erreur suivante:
Erreur de syntaxe lors de la conversion de la valeur varchar '20,3,17' vers
une colonne de type de données int.
Alors je comprend l'erreur, par contre je vois pas comment faire marcher ma
procédure comme je l'entend. Des idées ?
Merci d'avance.
-- Insert all other occurence WHILE ( 1 = 1 ) BEGIN SET @Val_Next_1 = CHARINDEX(@sDelim, @sText) SET @Val_Next_2 = CHARINDEX(@sDelim, SUBSTRING(@sText, @Val_Next_1 + 1, 4000))
SET @sText = SUBSTRING(@sText, @Val_Next_1 + 1, 4000)
IF @Val_Next_2 <> 0 BEGIN SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER ) VALUES( SUBSTRING(@sText, 1, @Val_Next_2 - 1), @OccurenceNumber ) END ELSE BEGIN IF @sText <> '' BEGIN SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER ) VALUES( @sText, @OccurenceNumber ) END BREAK END END
RETURN END
Cordialement _______________________________
Philippe TROTIN Microsoft Services France _______________________________
"Rudi Bruchez" <rudi#nospam#at#babaluga.com> a écrit dans le message de groupe de discussion : yocd1bom3p8u$
Ryo a écrit:
Alors je comprend l'erreur, par contre je vois pas comment faire marcher ma procédure comme je l'entend. Des idées ?
Bonjour,
Vous pouvez créer une fonction de type table qui parse la chaîne, ou passer par du XML : http://sqlserver.developpez.com/faq/?page=Jeu#Jeu9
-- Insert all other occurence
WHILE ( 1 = 1 )
BEGIN
SET @Val_Next_1 = CHARINDEX(@sDelim, @sText)
SET @Val_Next_2 = CHARINDEX(@sDelim, SUBSTRING(@sText, @Val_Next_1 + 1,
4000))
SET @sText = SUBSTRING(@sText, @Val_Next_1 + 1, 4000)
IF @Val_Next_2 <> 0
BEGIN
SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER )
VALUES( SUBSTRING(@sText, 1, @Val_Next_2 - 1), @OccurenceNumber )
END
ELSE
BEGIN
IF @sText <> ''
BEGIN
SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER )
VALUES( @sText, @OccurenceNumber )
END
BREAK
END
END
RETURN
END
Cordialement
_______________________________
Philippe TROTIN
Microsoft Services France
_______________________________
"Rudi Bruchez" <rudi#nospam#at#babaluga.com> a écrit dans le message de
groupe de discussion : yocd1bom3p8u$.6kwn9xo4iea0.dlg@40tude.net...
Ryo a écrit:
Alors je comprend l'erreur, par contre je vois pas comment faire marcher
ma
procédure comme je l'entend. Des idées ?
Bonjour,
Vous pouvez créer une fonction de type table qui parse la chaîne, ou
passer
par du XML : http://sqlserver.developpez.com/faq/?page=Jeu#Jeu9
-- Insert all other occurence WHILE ( 1 = 1 ) BEGIN SET @Val_Next_1 = CHARINDEX(@sDelim, @sText) SET @Val_Next_2 = CHARINDEX(@sDelim, SUBSTRING(@sText, @Val_Next_1 + 1, 4000))
SET @sText = SUBSTRING(@sText, @Val_Next_1 + 1, 4000)
IF @Val_Next_2 <> 0 BEGIN SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER ) VALUES( SUBSTRING(@sText, 1, @Val_Next_2 - 1), @OccurenceNumber ) END ELSE BEGIN IF @sText <> '' BEGIN SET @OccurenceNumber = @OccurenceNumber + 1
INSERT INTO @MySplitTable( MY_VALUE, MY_ORDER ) VALUES( @sText, @OccurenceNumber ) END BREAK END END
RETURN END
Cordialement _______________________________
Philippe TROTIN Microsoft Services France _______________________________
"Rudi Bruchez" <rudi#nospam#at#babaluga.com> a écrit dans le message de groupe de discussion : yocd1bom3p8u$
Ryo a écrit:
Alors je comprend l'erreur, par contre je vois pas comment faire marcher ma procédure comme je l'entend. Des idées ?
Bonjour,
Vous pouvez créer une fonction de type table qui parse la chaîne, ou passer par du XML : http://sqlserver.developpez.com/faq/?page=Jeu#Jeu9