我有下面的查询返回2条记录(在DataSet的查询生成器)
SELECT EmpID, Name, id
FROM Users
WHERE (CAST(id AS Varchar(20)) IN ('5688','5689'))
现在,如果我这样做,从后面的代码传递参数,而不是相同的查询:字符串PARAM =“‘5688’,‘5689’”; 它返回null。
WHERE (CAST(id AS Varchar(20)) IN (@param))
我试图起飞的第一个和最后一个”,但是这并没有使diffrence。
!ID是一个独特的PK!
任何人有一个线索?
我找到解决的办法很简单,这就像一个魅力,而且也没有必要SPS或其他功能;
SQL:
SELECT whatever
FROM whatever
WHERE (PATINDEX('%''' + CAST(id AS Varchar(20)) + '''%', @param) > 0)
C#:
String param = "'''1234'',''4567'''";
dataTable1 = tableAdapter1.getYourValues(param);
变量未IN子句中允许的。
你期待一个逗号分隔的字符串,你可以使用分割功能(用户自定义和非标)与原表加入他们的价值观:
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参数(@参数)。
command = new SqlCommand("SELECT * FROM table WHERE number IN (" + param + ")", connection);
command.ExcecuteReader();
文章来源: Passing parameter to SQL select statement IN clause acts weird.