2010-08-05 6 views
1

Je dois créer une procédure stockée qui reçoit un paramètre (nommé @codes).Procédure stockée: Recherche dans une table lors du passage d'un tableau de valeurs

Chaîne contenant une liste de codes séparés par une demi-colonne. Je devrais regarder à l'intérieur d'une table et retourner toutes les lignes qui ont un code (qui est dans la colonne EANcodes) qui a été passé dans le paramètre @codes.

Quelqu'un peut-il m'aider à démarrer. Ma connaissance des procédures stockées est très limitée.

Merci d'avance.

Répondre

0

Les procédures stockées ne sont pas vraiment destinées à gérer une liste de chaînes en tant que paramètre. Vous feriez mieux de le découper dans votre code d'application, puis d'appeler la procédure stockée plusieurs fois avec chacun d'eux en tant que paramètre.

Cependant, si vous ressentez le besoin de le faire de cette façon. Vous pouvez parcourir la chaîne et utiliser CHARINDEX pour trouver l'index suivant d'un point-virgule, puis utiliser SUBSTRING pour obtenir le code suivant. Vous pouvez ensuite utiliser un CTE pour les lignes correspondantes à chaque itération et lorsque la boucle est terminée, il suffit de renvoyer le CTE. C'est assez hacky, mais je ne peux pas penser à un autre moyen de le faire. (Ce sont les fonctions de chaîne T-SQL)

Pour info sur les fonctions de manipulation de chaînes (en T-SQL): http://msdn.microsoft.com/en-us/library/ms186323.aspx

Et voici des fonctions similaires dans MySQL: http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

+0

Ou, pour une solution rapide et sale, utilisez REPLACE() pour transformer les points-virgules en virgules, puis utilisez le SQL dynamique pour insérer cela dans une clause IN (...). Mais je ne pourrais pas vraiment recommander cela comme une réponse, parce que faire ce genre de chose est une grande indication que vous avez mal votre conception! –

1

Idéalement, je Je préfère voir le paramètre passer d'une autre manière, soit en utilisant un table-value parameter (en supposant SQL 2008) ou XML qui peut être facilement déchiqueté dans une table.

Vous pouvez également utiliser une fonction de division SQL (un exemple est here) pour analyser la chaîne dans une table temporaire, puis vous joindre à cette table dans votre requête de sélection.