關鍵字:存儲過程代替SQL語句
存儲過程的好外,我就不多說了,想必各位都已了然于胸 當然,存儲過程也有不少壞處:
1,當存儲過程數量越來越多的時候,在眾多存儲過程中找到想要修改的存儲過程是一件麻煩的事.
2.如果用嵌入式SQL語句,可以在修改代碼時,順便就修改了數據庫操作語句,使用方便。
針對這兩個所謂的缺點,我提出我的一些看法:
1.如果說存儲過程多了,不好找,那你該檢討一下您的命名習慣是否規范是否達意,如果是多人合作的團隊,大家更應該對于存儲過程的命名有一致的規則,當然,不只存儲過程需要這樣,其他部分也都要需要這樣.好的存儲過程命名最好能包含操作名稱(insert/update/get/list等),要操作的對象名稱(表名)等,這樣,即便你的存儲過程再多,一樣也能快速找到要改的那個,這樣命名,還可以讓你通過SQL 2000的對象查找功能一次性的按表名找到與此表相關的所有存儲過程的名稱,同理,你用LIST來查,也可以查到所有LIST功能的存儲過程
2,對于第二種觀點,我是不大同意的,在過往的例子中,我發現,將SQL語句從代碼中分離出來,帶來的好處遠遠大于壞處,而且這樣更符合分層的原則,如果我們將SQL語句嵌入到代碼中,當你僅需要多獲取一個字段的值,或者對SQL語句本身做一些修改時,你就必須要編譯,然后上傳DLL,而如果你是用存儲過程的話,你直接改一下存儲過程就好了,而且,將二者分離,DBA寫好存儲過程,列好說明及使用規則,交給負責寫DAL層的同學,DAL層的同學閉上眼無需了解SQL語句,也可完成他的工作,因此,從這個角度來說,很好的分隔了工作,不必要要寫DAL層的同學也是SQL存儲過程高手了
3,防止注入攻擊,如果不用存儲過程而用嵌入式SQL,你勢必要為了防止注入攻擊而對輸入的用戶數據做更多的處理工作,例如處理一些SQL敏感字符等
4.更為重要的是,如果你要朝一個表中插入的是一個BINARY內容的時候,難道你會用SQL語句嗎?
5,嵌入式SQL特別是拼貼SQL語句,一向是比較容易出問題的環節,而存儲過程在寫的時候,就經過檢查,儲如漏掉符號,Insert的字段數目與參數數目不一致的小錯誤,會立即被糾正
6,誰都知道存儲過程是預編譯的
7,如果你是高手,你可以分析并優化存儲過程來提高性能(以前記得看過MS的一個牛人技術支持講述存儲過程分析和優化,非常啟發人)
最常見的是,在實際運用中,為了減少DATASET數據集的大小和提高性能,通常我們只Select當前需要的字段,但是,隨著發展,你可以需要其他字段,這時,如果用嵌入SQL,就要修改SQL語句,編譯,再寫上綁定該字段的表達式,但是,如果用存儲過程,你只要綁定表達式,然后給存儲過程中加上這個字段名就可以了.
再如,如果用STRING來拼貼SQL的Insert語句,那很可能是這樣拼
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/