【发布时间】:2011-01-17 23:41:02
【问题描述】:
我有一个带有 where 子句的查询,如下所示:
WHERE field IN ( 1, 2, 3 )
可以对其进行参数化,使其看起来像:
( :list ) 中的 WHERE 字段?
如何创建 :list 参数,假设它是一个整数列表,可以是 1 到 10 个整数?
ASP.net,网络表单,如果有影响的话。
【问题讨论】:
标签: asp.net sql oracle parameters
我有一个带有 where 子句的查询,如下所示:
WHERE field IN ( 1, 2, 3 )
可以对其进行参数化,使其看起来像:
( :list ) 中的 WHERE 字段?
如何创建 :list 参数,假设它是一个整数列表,可以是 1 到 10 个整数?
ASP.net,网络表单,如果有影响的话。
【问题讨论】:
标签: asp.net sql oracle parameters
有两种容纳动态 IN 列表的方式:
大多数人更喜欢非动态 SQL 方法 - this link provides various ways to do it。使用它的最大原因:
WHERE :list LIKE '%,' || t.column || ',%'
...是上面那个吗:
简单的事实是,它不会按预期工作。 Oracle 10g+ 支持的正则表达式将允许对列进行条件检查,但仍面临将索引呈现为无意义的问题
提到“动态 SQL”,您很可能是 hounded about SQL injection attacks。使用绑定变量可以缓解这种担忧。
也就是说,动态 SQL 需要对查询进行最少的更改。
【讨论】:
与 SQL Server 相同的答案,已在此处询问:Parameterize an SQL IN clause
【讨论】:
据我所知,你不能。您将在同一个地方混合值和运算符。
但是,在 ASP.NET 中自动创建参数数组并动态获取它应该相当简单:
WHERE field IN (:list1, :list2, :list3, :list4)
【讨论】:
“我如何绑定一个 in 列表”这个问题似乎出现了很多。
在 Oracle 中执行此操作的最简单“技巧”是使用我在此处发布的答案:
Dynamic query with HibernateCritera API & Oracle - performance
我不能假装这是我的把戏,因为它来自 Oracle 大师 Tom Kyte 的博客!
【讨论】: