2

我有以下查询返回 2 条记录(在 DataSet 的查询生成器中)

SELECT        EmpID, Name, id
FROM          Users
WHERE        (CAST(id AS Varchar(20)) IN ('5688','5689'))

现在,如果我执行相同的查询,而不是从后面的代码中传递参数: String param = "'5688','5689'"; 它返回空值。

WHERE        (CAST(id AS Varchar(20)) IN (@param))

我试着去掉第一个和最后一个',但这并没有什么不同。

!!!id是独一无二的PK!!!

有人有线索吗?

4

4 回答 4

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);
于 2012-04-30T18:49:14.293 回答
1

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

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

有关更多信息,您可以访问

于 2012-04-29T17:13:56.570 回答
0

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

定义String param = "'5688','5689'";和使用它作为(@param)一个('5688','5689')字符串。哪个行不通。

于 2012-04-29T17:11:10.533 回答
0

比巴斯是正确的。对我来说,这很有效:

string param="'1234','4567'";我们不能使用 param 作为 SQL Parameter(@param)。

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

command.ExcecuteReader();

于 2013-03-19T15:40:34.603 回答