我有一个问题,也许它简单(为你的大师)。动态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%'
?? ??
谢谢你们。
我喜欢这一张。我自己使用它,因为当我必须对SQL语句进行“重”解析时,即以编程方式移除AND子句。允许您回到前一个“AND”,并删除该行等。对WHERE子句进行折扣使得这更容易。 – 2013-02-20 15:28:13
我以前见过这个,尽管它没有回答我最初的问题,但它很有趣。假设我坚持我的C#对象类,现在我试图确定我是否使用“AND”(我有一个布尔变量在我使用AND时设置为true)。假设我这样做,我会不必跟踪我何时使用我的第一个参数,对吗?这是否有任何表现处罚,并且1 = 1是否会导致任何问题? – 2013-02-20 16:42:40
只是看了一些额外的细节:http://stackoverflow.com/questions/8149142/where-1-1-statement 我其实很喜欢这个想法,并会尝试实施它。谢谢你的提示!如果我决定追求这条道路,我也可以使用这种方法最终构建我的存储过程。多谢你们。 – 2013-02-20 16:49:13