很久沒來博客園留下點東西,忙到找工做,最近把工做落實了。git
最近公司的業務都是存儲過程開發,發現去維護起來至關困難。算法
因爲是維護項目,產品好久前都發布了,然而有一些修改,讓咱們去修改如今的邏輯,去看懂人家的邏輯是件痛苦的事情,何況對整個業務基本不瞭解,表的字段啊,sql
表之間的聯繫,都是雲裏霧裏。然而,把業務邏輯寫在存儲過程裏面,隨便一個存儲過程都是千兒八百行,表示很無奈。 數據庫
這裏就我的對存儲過程的見解而言,express
1,在存儲過程寫業務,不是合理的途徑。c#
2,在SQL中寫的SP,換到Oracle ,MySql中,都沒法使用,移植性差。安全
3,調試雖然可使用查詢分析器,發現仍是很差調試。服務器
固然優勢一大堆,什麼效率高啊,速度快啊,安全性高啊,對於複雜計算確實是很方便,畢竟在c#算法中須要若干個sql語句,ide
在存儲過程當中就能夠一步到位,這裏就很少說了。函數
其實存儲過程語法是很簡單的,定義Declare,變量類型也就那些經常使用的varchar ,char ,int,bigint, 條件判斷IF Else, While .裏面是沒有FOR循環這個概念的。
固然是用while循環已經很是足夠了。
還有就是使用SQL中的系統函數,這個是至關方便
舉個簡單例子,若是要查詢時間間隔等於好多的,或者是等於當前時間的,用過的都知道,時間有年月日時分秒毫秒,因此要等起來的話仍是須要轉換的,
好比用Convert(....)之類的,用系統函數方便多了,
DATEDIFF ( datepart , startdate , enddate )
1 SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate 2 3 ----- 4 DiffDate 5 1 6 7 SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate 8 9 10 11 ------ 12 DiffDate 13 -1
這三個函數分別返回以整數表示的datetime或者smalldatetime類型值的日、月、年。它們的用途很普遍,如能夠建立獨特的個性化日期格式。假設須要建立一個自定義的日期值做爲字符串,經過將這三個函數的輸出結果轉換成字符類型,而後進行鏈接操做,就能夠對輸出結果以任何形式進行組合了:
SELECT 'Year: ' + CONVERT(varchar(4), YEAR(GETDATE())) + ', Month: ' + CONVERT(varchar(2), MONTH(GETDATE())) + ', Day: ' + CONVERT(varchar(2), DAY(GETDATE()))
The result:
Year: 2013, Month: 8, Day: 28
系統函數不少,具體的能夠去查看MSDN,這個還真的好用。
因此,我的以爲存儲過程比較實用的地方:
1,報表中,實用存儲過程方便。
2,系統中複雜的運算,可使用,不然在代碼中須要若干計算,屢次鏈接數據庫,這樣很消耗性能。
關於存儲過程的全部文章基本就說到這了,但願能幫助正在學習的人,祝看博客的人每天有個好心情哈!
若是您有任何關於存儲過程的問題和不一樣看法,歡迎留下你的足跡。