如何将参数传递给 sql 'in' 语句?

Posted

技术标签:

【中文标题】如何将参数传递给 sql \'in\' 语句?【英文标题】:How to pass parameter to sql 'in' statement?如何将参数传递给 sql 'in' 语句? 【发布时间】:2011-08-07 18:32:46 【问题描述】:

我想创建这个查询:

select * from products where number in ('123', '234', '456');

但我找不到任何使用 Npgsql 和 NpgsqlParameter 实现此目标的示例。我试过这样:

string[] numbers = new string[]  "123", "234" ;

NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number in (:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", numbers);
command.Parameters.Add(p);

但它没有工作;)

【问题讨论】:

【参考方案1】:

2021 年的更新答案:

你可以像这样使用ANY

WHERE id = ANY (@ids)

然后,当您添加参数时,请执行以下操作:

cmd.Parameters.AddWithValue("ids", ids.ToArray());

【讨论】:

【参考方案2】:

使用“从测试中删除 id IN (select unnest(@ids))”

【讨论】:

【参考方案3】:

除了@Quassnoi 答案,我将添加这个以展示我们如何在实际代码中完成它。

警告!此工作代码来自真实项目,可能会损坏您漂亮的方法!

string commstr = "SELECT product_name, price, product_url, image_url FROM products WHERE id  = ANY(@arr);";
NpgsqlCommand cm = new NpgsqlCommand(commstr, cn);
NpgsqlParameter arpar = new NpgsqlParameter();
arpar.ParameterName = "arr";
arpar.NpgsqlDbType = NpgsqlDbType.Array | NpgsqlDbType.Bigint;
arpar.Value = PerformQuerySphinx(query, limit);
cm.Parameters.Add(arpar);

【讨论】:

【参考方案4】:

您需要动态创建命令字符串 - 循环使用第一个参数为 :num0,第二个参数为 :num1 等。添加完所有参数后,删除最后一个字符“,”并将其替换为“)” .

【讨论】:

如果你可以按照 Quassnoi 建议的方式使用数组,我会同意的。【参考方案5】:

将其作为数组传递:

string[] numbers = new string[]  "123", "234" ;

NpgsqlCommands cmd = new NpgsqlCommands("select * from products where number = ANY(:numbers)");
NpgsqlParameter p = new NpgsqlParameter("numbers", NpgsqlDbType.Array | NpgsqlDbType.Text);
p.value = numbers;
command.Parameters.Add(p);

【讨论】:

这会产生错误:你的array变量在参数值中应该是numbers @UwConcept:老实说,我上次使用NPgSQL 已经很久了,甚至没有安装VS 来检查:) @Adrian: 语法没问题还是你必须改正?我无法检查。 使用 NpgsqlDbType | NpgsqlDbType.Numeric 如果你传递一个 int[]。我也认为它的 $numbers 不是:numbers?除此之外,语法对我有用。

以上是关于如何将参数传递给 sql 'in' 语句?的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给`pymssql`中的`cursor.execute`?

MS Access - 从文本框中的用户输入将参数传递给 SQL 语句

通过批处理文件将 varchar 参数传递给 sql 文件

如何将参数传递给SQL(Excel)中的查询

Delphi:如何将列表作为参数传递给SQL查询?

什么是将参数传递给 SQL,我为什么需要它?