Passing parameter to SQL select statement IN clause acts weird.

不问归期 提交于 2019-12-20 03:32:20

问题


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?


回答1:


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);



回答2:


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




回答3:


('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.




回答4:


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();



来源:https://stackoverflow.com/questions/10374082/passing-parameter-to-sql-select-statement-in-clause-acts-weird

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!