我有一个表单,用户可以在其中指定各种参数来挖掘一些数据(状态、日期等)。
我可以生成如下查询:
SELECT * FROM table WHERE:
status_id = 3
date = <some date>
other_parameter = <value>
等等。每个 WHERE
都是可选的(我可以选择 status = 3
的所有行,或 date = 10/10/1980
的所有行,或所有具有 status = 3 AND date = 10/10/1980
等的行。
给定大量参数,都是可选的,组成动态存储过程的最好方法是什么?
我正在研究各种数据库,例如: MySQL、Oracle 和 SQLServer。
最佳答案
实现此目的的最简单方法之一:
SELECT * FROM table
WHERE ((@status_id is null) or (status_id = @status_id))
and ((@date is null) or ([date] = @date))
and ((@other_parameter is null) or (other_parameter = @other_parameter))
等等。 这完全消除了动态 sql 并允许您搜索一个或多个字段。通过消除动态 sql,您消除了有关 sql 注入(inject)的另一个安全问题。
关于sql - 带有可选 "WHERE"参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697671/