Jake
Jake

Reputation: 159

Passing parameter to SQL select statement IN clause acts weird.

I've got the following query that returns 2 records (in DataSet's query builder)

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

Now if I do the same query passing the parameter instead from code behind: String param = "'5688','5689'"; it returns null.

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

I tried taking off the very first and last ', but that did not make a diffrence.

!!!id is a unique PK!!!

Anyone's got a clue?

Upvotes: 2

Views: 6537

Answers (4)

Praveen
Praveen

Reputation: 56519

Bibhas is correct. For me this worked:

string param="'1234','4567'"; we can't use param as SQL Parameter(@param).

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

command.ExcecuteReader();

Upvotes: 0

Jake
Jake

Reputation: 159

The solution I found is quite simple, this works like a charm and there's no need for sps or other functions;

SQL:

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

C#:

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

Upvotes: 3

Amit
Amit

Reputation: 22086

A variable is not allowed in the IN clause.
You are expecting the values as a comma delimited string you could use the split function (user defined and non-standard) to join them with the original tables:

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

For more information you can visit this

Upvotes: 1

Bibhas Debnath
Bibhas Debnath

Reputation: 14939

('5688','5689') is an array of values.

Defining String param = "'5688','5689'"; and using it as (@param) makes ('5688','5689') a string. Which wont work.

Upvotes: 0

Related Questions