sql - 带有可选 "WHERE"参数的存储过程

标签 sql mysql sql-server oracle

我有一个表单,用户可以在其中指定各种参数来挖掘一些数据(状态、日期等)。

我可以生成如下查询:

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/

相关文章:

php - 将 PHP 文件解析为 XML 文件?

mysql - 如何获取昨天的数据并将其显示在今天的表格中?

sql-server - 使用 Key Vault 和证书的 SQL Azure IaaS 加密

mysql - 在 Drupal 应用程序中将 MySQL 查询转换为 SQl Server 查询

MySQL 多个 JOINS 且至少有一个 LIKE 包含一个值

sql-server - tsql : how to do a substring replace?

sql - 查询以在特定条件下重置以递增计数

mysql - 在 MySql 中使用 IN 子句的不同方法

mysql - 仅当列不为空时显示该列

mysql - 查询特定唯一 id 的所有值都相同的情况