Passage de paramètre à l’instruction de sélection SQL La clause IN a un effet bizarre.

J’ai la requête suivante qui renvoie 2 enregistrements (dans le générateur de requête de DataSet)

SELECT EmpID, Name, id FROM Users WHERE (CAST(id AS Varchar(20)) IN ('5688','5689')) 

Maintenant, si je fais la même requête, transmettant le paramètre à la place du code situé derrière: Ssortingng param = “‘5688’, ‘5689’”; il retourne null.

 WHERE (CAST(id AS Varchar(20)) IN (@param)) 

J’ai essayé de décoller le premier et le dernier ‘, mais cela n’a pas fait de différence.

!!! id est une PK unique !!!

Quelqu’un a un indice?

La solution que j’ai trouvée est assez simple, cela fonctionne à merveille et il n’y a pas besoin de sps ou d’autres fonctions;

SQL:

 SELECT whatever FROM whatever WHERE (PATINDEX('%''' + CAST(id AS Varchar(20)) + '''%', @param) > 0) 

C #:

 Ssortingng param = "'''1234'',''4567'''"; dataTable1 = tableAdapter1.getYourValues(param); 

Une variable n’est pas autorisée dans la clause IN.
Vous attendez les valeurs sous forme de chaîne délimitée par des virgules. Vous pouvez utiliser la fonction split (définie par l’utilisateur et non standard) pour les joindre aux tables d’origine:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=326300&SiteID=1

Pour plus d’informations, vous pouvez visiter cette

('5688','5689') est un tableau de valeurs.

Définition de la Ssortingng param = "'5688','5689'"; et l’utiliser comme (@param) fait ('5688','5689') une chaîne. Ce qui ne fonctionnera pas.

Bibhas est correct. Pour moi cela a fonctionné:

ssortingng param="'1234','4567'"; nous ne pouvons pas utiliser param comme paramètre SQL (@param).

command = new SqlCommand("SELECT * FROM table WHERE number IN (" + param + ")", connection);

command.ExcecuteReader();