2012-02-24 56 views
3

我正在创建一个函数,该函数生成一个SQL查询,并通过作为参数给出的表达式(它将作为'WHERE'子句传递)过滤结果。如果省略参数,则返回所有结果。WHERE子句始终选择表中的所有记录

为了做到这一点,我可以测试一个空参数,并且只有在给出参数时才生成where子句(where = (parameter != null) ? "" : "WHERE " + parameter)。然而,我在想有没有一种表达方式,我可以默认为将始终返回所有结果。这样我就不需要测试是否包含WHERE关键字(where = "WHERE " + parameter)。

我故意没有提到逃避参数,以避免注入。在我的解决方案中,我不会忘记这一点,我保证! :)

+0

你在用什么语言?或者您是否使用专有SQL语言(例如T-SQL)来生成查询?请添加标签 – PinnyM 2012-02-24 14:51:52

+1

类似:http://stackoverflow.com/a/8149183/27535 – gbn 2012-02-24 14:54:35

+0

它是一种专有的SQL语言,特定于我正在使用的应用程序。很可能没有办法做到这一点,但我认为我会找出以此为出发点的“标准”方式。 – 2012-02-24 15:21:23

回答

9

我通常使用1 = 1

1

您可以将参数初始化为TRUE1

+3

并非所有的DBMS都支持这个功能,而OP没有指定他正在使用的DMBS。 – ruakh 2012-02-24 14:53:01

4
(where = "WHERE 1 = 1 " + parameter) 

在这种情况下,参数应与开始“和”令牌。