SQL 存儲過程入門(五)

      很久沒來博客園留下點東西,忙到找工做,最近把工做落實了。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()函數,獲取時間差,


DATEDIFF ( datepart , startdate , enddate )

datepart

是指定所跨邊界類型的 startdate 和 enddate 的一部分。 下表列出了全部有效的 datepart 參數。 用戶定義的變量等效項是無效的。

 

datepart

縮寫

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

hour

hh

minute

mi, n

second

ss, s

millisecond

ms

microsecond

mcs

nanosecond

ns

       startdate

是一個能夠解析爲 timedatesmalldatetimedatetimedatetime2 或 datetimeoffset 值的表達式。 date 能夠是表達式、列表達式、用戶定義的變量或字符串文字。 從 enddate 中減去 startdate

爲避免不肯定性,請使用四位數年份。 有關兩位數年份的信息,請參閱配置兩位數年份截止服務器配置選項

enddate

請參閱 startdate

 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,系統中複雜的運算,可使用,不然在代碼中須要若干計算,屢次鏈接數據庫,這樣很消耗性能。

 

   關於存儲過程的全部文章基本就說到這了,但願能幫助正在學習的人,祝看博客的人每天有個好心情哈!

  若是您有任何關於存儲過程的問題和不一樣看法,歡迎留下你的足跡。

相關文章
相關標籤/搜索