很多程序員在實際開發中,經常遇到這種情況,列表上方有很多條件,包含下拉框,輸入框等等,這些條件都可以不輸入,如果我們需要寫一個存儲過程,很多條件挨個判斷是否為空,且進行任意組合,任何一個開發人員都會瘋的。閑話少說,接下來舉例說明:
create PRoc myproc
@condition1 varchar(50)=null,
@condition2 int=null,
@condition3 bit
as
select col1,col2 from table
where col3=isnull(@condition1,col3)
and col4=isnull(@condition2,col4)
and col5=isnull(@condition3,col5)
以上代碼中用到的ISNULL函數是sqlserver的內置函數,如果第一個參數為null,就會返回后面的值,如果where 后有col3=col3這樣的東西,可能會影響一些效率,但是畢竟解決問題了。美中不足的是,這個內置函數只在2008(含)以上版本里有,用2005的,趕緊升級吧。
也有人在存儲過程里拼接sql 字符串,然后使用exec來執行字符串,存儲過程的優勢就是其已經通過編譯了,速度比較快,一旦用exec來執行字符串,仍舊會比較慢,因為數據庫要先編譯你的字符串。
以上是個人淺見,歡迎拍磚。
新聞熱點
疑難解答