2012-02-24 60 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) 

在這種情況下,參數應與開始「和」令牌。