将参数传递给SQL select语句IN子句很奇怪。

时间:2012-04-29 17:06:53

标签: c# sql dataset tableadapter query-builder

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

任何人都有线索?

4 个答案:

答案 0 :(得分:3)

我发现的解决方案非常简单,这就像一个魅力,不需要sps或其他功能;

SQL:

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

C#:

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

答案 1 :(得分:1)

IN子句中不允许使用变量 您希望将值作为逗号分隔的字符串,您可以使用split函数(用户定义和非标准)将它们与原始表连接:

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

有关详细信息,请访问this

答案 2 :(得分:0)

('5688','5689')是一组值。

定义String param = "'5688','5689'";并将其用作(@param)会使('5688','5689')成为一个字符串。哪个不行。

答案 3 :(得分:0)

Bibhas是对的。对我来说这很有效:

string param="'1234','4567'";我们不能将param用作SQL参数(@param)。

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

command.ExcecuteReader();