将参数传递给SQL select语句的IN子句行为很奇怪。
我有以下查询返回2条记录(在DataSet的查询构建器中)
SELECT EmpID, Name, id FROM Users WHERE (CAST(id AS Varchar(20)) IN ('5688','5689'))
现在,如果我执行相同的查询,而不是从后面的代码传递参数:String param =“’5688’,’5689’”; 它返回null。
WHERE (CAST(id AS Varchar(20)) IN (@param))
我尝试脱掉第一个和最后一个’,但这并没有造成任何差异。
!!! id是一个独特的PK!
任何人都有线索?
我发现的解决方案非常简单,这就像一个魅力,不需要sps或其他function;
SQL:
SELECT whatever FROM whatever WHERE (PATINDEX('%''' + CAST(id AS Varchar(20)) + '''%', @param) > 0)
C#:
String param = "'''1234'',''4567'''"; dataTable1 = tableAdapter1.getYourValues(param);
IN子句中不允许使用变量。
您希望将值作为逗号分隔的字符串,您可以使用split函数(用户定义和非标准)将它们与原始表连接:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=326300&SiteID=1
有关更多信息,请访问此页面
('5688','5689')
是一组值。
定义String param = "'5688','5689'";
并使用它作为(@param)
使('5688','5689')
成为一个字符串。 哪个不行。
Bibhas是对的。 对我来说,这工作:
string param="'1234','4567'";
我们不能使用param作为SQL参数(@param)。
command = new SqlCommand("SELECT * FROM table WHERE number IN (" + param + ")", connection);
command.ExcecuteReader();