OVH Cloud OVH Cloud

Procédure stocké

1 réponse
Avatar
Philippe
Bonjour =E0 tous

Voila j'essaye de cr=E9er une proc=E9dure stock=E9 de ce type

la variable ETAT dans la table est de type INT

"ALTER PROCEDURE dbo.DemandeParETAT
@ETAT as varchar
AS
SELECT *
FROM Demandes
WHERE (ETAT IN (@ETAT))
RETURN "

la syntaxe est correct
mais lorsque j'indique commme param=E8tres 1,2 seul les=20
enregistrements dont la valeur est 1 sont retourn=E9s

lorsque j'indique commme param=E8tres 2,1 seul les=20
enregistrements dont la valeur est 2 sont retourn=E9s

Quelqu'un =E0 t'il une explication
Merci d'avance

1 réponse

Avatar
Patrice
Cela revient à faire ETAT IN ('1,2') ou ETAT IN ('2,1') ce qui n'est pas
pareil que ETAT IN (1,2) ou ETAT IN (2,1).

Il existe plusieurs solutions selon les contraintes notamment :
- utiliser une fonction pour découper les valeurs : découper le paramètre
VARCHAR par exemple avec une fonction retournant une table ce qui permet
ensuite d'utiliser le IN (par exemple
http://www.windowsitpro.com/Files/09/21071/Listing_01.txt)
- passer les valeurs séparemment : utiliser des paramètres @v1,@v2 etc
selon le nombre voulue
- SQL dynamique : construire la chaine SQL dans une variable et l'exécuter
via EXECUTE
- et sans doute d'autres...

Patrice

--

"Philippe" a écrit dans le
message de news:151001c570ca$dcb3e910$
Bonjour à tous

Voila j'essaye de créer une procédure stocké de ce type

la variable ETAT dans la table est de type INT

"ALTER PROCEDURE dbo.DemandeParETAT
@ETAT as varchar
AS
SELECT *
FROM Demandes
WHERE (ETAT IN (@ETAT))
RETURN "

la syntaxe est correct
mais lorsque j'indique commme paramètres 1,2 seul les
enregistrements dont la valeur est 1 sont retournés

lorsque j'indique commme paramètres 2,1 seul les
enregistrements dont la valeur est 2 sont retournés

Quelqu'un à t'il une explication
Merci d'avance