好久沒來博客園留下點東西,忙到找工作,最近把工作落實了。
最近公司的業務都是存儲過程開發,發現去維護起來相當困難。
由於是維護項目,產品很久前都發布了,然而有一些修改,讓我們去修改現在的邏輯,去看懂人家的邏輯是件痛苦的事情,況且對整個業務基本不了解,表的字段啊,
表之間的聯系,都是雲里霧里。然而,把業務邏輯寫在存儲過程里面,隨便一個存儲過程都是千兒八百行,表示很無奈。
這里就個人對存儲過程的看法而言,
1,在存儲過程寫業務,不是合理的途徑。
2,在SQL中寫的SP,換到Oracle ,MySql中,都無法使用,移植性差。
3,調試雖然可以使用查詢分析器,發現還是不好調試。
當然優點一大堆,什么效率高啊,速度快啊,安全性高啊,對於復雜計算確實是很方便,畢竟在c#算法中需要若干個sql語句,
在存儲過程中就可以一步到位,這里就不多說了。
其實存儲過程語法是很簡單的,定義Declare,變量類型也就那些常用的varchar ,char ,int,bigint, 條件判斷IF Else, While .里面是沒有FOR循環這個概念的。
當然是用while循環已經非常足夠了。
還有就是使用SQL中的系統函數,這個是相當方便
舉個簡單例子,如果要查詢時間間隔等於好多的,或者是等於當前時間的,用過的都知道,時間有年月日時分秒毫秒,所以要等起來的話還是需要轉換的,
比如用Convert(....)之類的,用系統函數方便多了,
Datediff()函數,獲取時間差,
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
DAY()、MONTH()和YEAR()函數
這三個函數分別返回以整數表示的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,系統中復雜的運算,可以使用,否則在代碼中需要若干計算,多次連接數據庫,這樣很消耗性能。
關於存儲過程的所有文章基本就說到這了,希望能幫助正在學習的人,祝看博客的人天天有個好心情哈!
如果您有任何關於存儲過程的問題和不同見解,歡迎留下你的足跡。