动态MySQL存储过程中的子句

Jor*_*n G 6 mysql sql procedure

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

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

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

....

string query = "SELECT col1, col2 FROM tblThreads " + whereClause
Run Code Online (Sandbox Code Playgroud)

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

SELECT col1, col2 FROM tblThreads
Run Code Online (Sandbox Code Playgroud)

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

SELECT col1, col2 FROM tblThreads WHERE (IS NULL @keywords OR description like '%@keywords%'
Run Code Online (Sandbox Code Playgroud)

??

多谢你们.

Mat*_*che 2

如果您允许他们查询整个数据库,最简单的方法就是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%'"
}
Run Code Online (Sandbox Code Playgroud)