动态MySQL存储过程中的子句

我有一个问题,也许它很简单(对你来说是大师).

我将我的SQL Paging类从C#转换为MySQL存储过程.在我的C#自制对象中,查询是根据条件动态构建的.例:

if(keywords is not null)
{ 
  whereClause += "WHERE description LIKE '%keywords%'"
}
if(price is not null)
{
  whereClause += "AND price = '%price%'"
}

….

string query = "SELECT col1, col2 FROM tblThreads " + whereClause

现在,我的问题是:如何在MySQL中执行类似于此的动态where子句?或者更确切地说,如果他们没有为这些参数输入任何内容,我将如何告诉存储过程中的MySQL跳过这些参数? IE:

SELECT col1, col2 FROM tblThreads

如果这些参数为空,那会是这样的吗?

SELECT col1, col2 FROM tblThreads WHERE (IS NULL @keywords OR description like '%@keywords%'

??

多谢你们.

最佳答案
如果你允许他们查询整个数据库,最简单的方法就是在你的语句中添加1 = 1

whereClause = "WHERE 1 = 1"

if(keywords is not null)
{ 
 whereClause += "AND description LIKE '%keywords%'"
}
if(price is not null)
{
 whereClause += "AND price = '%price%'"
}

转载注明原文:动态MySQL存储过程中的子句 - 代码日志