传递参数给SQL SELECT语句子句行为怪异。(Passing parameter to SQL

2019-07-29 05:02发布

我有下面的查询返回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!

任何人有一个线索?

Answer 1:

我找到解决的办法很简单,这就像一个魅力,而且也没有必要SPS或其他功能;

SQL:

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

C#:

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


Answer 2:

变量未IN子句中允许的。
你期待一个逗号分隔的字符串,你可以使用分割功能(用户自定义和非标)与原表加入他们的价值观:

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

欲了解更多信息,您可以访问这个



Answer 3:

('5688','5689')是值的数组。

限定String param = "'5688','5689'"; 和使用它作为(@param)使得('5688','5689')的字符串。 这不会工作。



Answer 4:

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.