将参数传递给 SQL 选择语句 IN 子句的行为很奇怪



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

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

现在,如果我执行相同的查询,而不是从代码隐藏传递参数:字符串参数 = "'5688','5689'"; 它返回 null。

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

我尝试取下第一个和最后一个',但这并没有产生差异。

!!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 子句中不允许使用变量。
您希望这些值为逗号分隔的字符串,您可以使用 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'";我们不能将参数用作SQL参数(@param)。

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

command.ExcecuteReader();

最新更新