查詢資料通常會依UI輸入條件,最後得到要送往DB執行的SQL字串,以下面查詢畫面為例:
常見的組合SQL字串之實作方式約有:
- 在字串接龍裏,透過IF-ELSE判斷輸入來組合SQL文串,然而邏輯判斷及SQL字句夾雜,維護不易,加上還要考慮WHERE AND的字句及分頁語法,混亂不堪。
- 撰寫特殊的SQL Composer物件,依UI控制項輸入加入相關SQL子句,最後輸出完整字串。其缺點是要查看及測試SQL字串不易,遇上很複雜的多個SQL指令文本,愈寫愈複雜。
以上的作法我都實作過,甚至為了跨不同資料庫對於不相容的SQL語句作自動轉換(如LIMIT分頁),但總覺得不是很滿意,因為程式裏的SQL字串應該要能「非常輕易」貼到管理工具去交叉測試執行才對。因此提出了以下的寫法,既簡單又好理解,供大家參考。
先將要執行的完整SQL做好斷行排版及註解(這是程序員的專業素養),再加入StringBuilder類別(加上@即可斷行),每一個過濾條件前加入辨別代碼(標示1-2),最後再判斷UI控制項上是否有輸入值,替代文本變數即可。
本身這些AND條件就已註解不會執行,替代成空白字元等同執行,如此一來非常好維護SQL及作事前的資料測試。我也習慣在SQL文本前端加入SQL變數宣告,方便程序員作測試及提醒輸入條件的參數指定。
No comments:
Post a Comment