IN
a besoin d'être comme suit:
... IN (@ param1, @ param2, ...)
Donc, vous devez faire:
SELECT DISTINCT Details from tbData WHERE Name IN (@svt) AND [email protected]
Mise à jour:
L'instruction de procédure alter que vous avez fournie dans votre question est syntaxiquement incorrecte. Ma réponse fournit la syntaxe correcte pour écrire l'instruction et elle compile. En relisant votre question, je vois que vous avez en fait deux problèmes. La première était une erreur de syntaxe et la seconde transmettait une liste délimitée par des virgules dans un seul paramètre.
La réponse est simplement que vous ne pouvez pas fournir une liste de valeurs séparées par des virgules au moment de l'exécution dans un seul paramètre de type chaîne utilisé dans la clause IN (...)
. Maintenant, sur ce deuxième point, je dirais que ce n'est pas une bonne approche de conception/programmation du problème, mais cela peut être fait en utilisant SQL dynamique ou en analysant chaque valeur du paramètre chaîne, les stocker dans une table temporaire puis réviser votre requête pour joindre à cela, ou utiliser un (ou utiliser une fonction de valeur table et stocker les éléments analysés là, où il peut être interrogé
Voici la syntaxe corrigée pour votre code, mais cela ne résoudrait pas le problème. deuxième aspect du passage d'une chaîne contenant une liste de valeurs séparées par des virgules, ce qui pourrait être résolu comme je l'ai décrit ci-dessus
Pour l'erreur de syntaxe, vous pouvez d'abord créer une table fictive pour tester votre code. La table de base de données doit avoir une clé primaire.Ceci est strictement une table factice pour tester la déclaration:
CREATE TABLE TbData ( Nom nvarchar (255), Détails nvarchar (255), Adresse nvarchar (255) );
Ensuite, vous pouvez créer la procédure initiale stockée:
CREATE PROCEDURE test ( @ser nvarchar (255), @svt nvarchar (255) ) AS BEGIN SELECT DISTINCT Détails DE tbData OÙ Nom IN (@ser) et adresse = @svt FIN
Et enfin, exécutez l'instruction de procédure stockée alter vous avait posé des questions sur:
ALTER PROCEDURE test ( @ser nvarchar (255), @svt nvarchar (255) ) AS BEGIN SELECT DISTINCT Détails DE tbData OU Nom IN (@ser) et adresse = @svt FIN
double possible de [SQL une Paramétrer clause?] (Http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause) –
Lié: http://stackoverflow.com/q/608562/55209 –