Comment passer une liste séparée par des virgules à une procédure stockée ?

J'ai donc un proc stocké Sybase qui prend 1 paramètre qui est une liste de chaînes séparées par des virgules et exécute une requête avec dans une clause IN() :

CREATE PROCEDURE getSomething @keyList varchar(4096)
AS
SELECT * FROM mytbl WHERE name IN (@keyList)

Comment puis-je appeler ma procédure stockée avec plus d'une valeur dans la liste ? Pour l'instant j'ai essayé

exec getSomething 'John'         -- works but only 1 value
exec getSomething 'John','Tom'   -- doesn't work - expects two variables
exec getSomething ''John','Tom'' -- doesn't work - doesn't find anything
exec getSomething ''John','Tom'' -- doesn't work - doesn't find anything
exec getSomething ''John','Tom'' -- doesn't work - syntax error

EDIT : j'ai en fait trouvé cette page qui a un grand référence des différentes manières de passer un tableau à une sproc

请先 登录 后评论

3 réponses

Kev

Passez la liste séparée par des virgules dans une fonction qui renvoie une valeur de table. Il y a un exemple MS SQL quelque part sur StackOverflow, putain si je peux le voir en ce moment.

CREATE PROCEDURE getSomething @keyList varchar(4096)
AS
SELECT * FROM mytbl WHERE name IN (fn_GetKeyList(@keyList))

Appeler avec -

exec getSomething 'John,Tom,Foo,Bar'

Je suppose que Sybase devrait être capable de faire quelque chose de similaire ?

请先 登录 后评论
Paul Owens

Si vous utilisez Sybase 12.5 ou une version antérieure, vous ne pouvez pas utiliser les fonctions. Une solution de contournement pourrait être de remplir une table temporaire avec les valeurs et de les lire à partir de là.

请先 登录 后评论
Abel Gaxiola

Cela fonctionne en SQL. Déclarez dans votre procédure GetSomething une variable de type XML en tant que telle :

DÉCLARER @NameArray XML = NULL

Le corps de la procédure stockée implémente ce qui suit :

SELECT * FROM MyTbl WHERE nom IN (SELECT ParamValues.ID.value('.','VARCHAR(10)') FROM @NameArray.nodes('id') AS ParamValues(ID))

Depuis le code SQL qui appelle le SP, déclarez et initialisez la variable XML avant d'appeler la procédure stockée :

DÉCLARER @NameArray XML

SET @NameArray = '

请先 登录 后评论