程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLServer存儲過程編程經驗技巧

SQLServer存儲過程編程經驗技巧

編輯:關於SqlServer
MS SQL Server目前正日益成為WindowNT操作系統上面最為重要的一種數據庫管理系統,隨著
  MS SQL Server2000的推出,微軟的這種數據庫服務系統真正的實現了在WindowsNT/200
  0系列操作系統一統天下的局面,在微軟的操作系統上面,沒有任何一種數據庫系統能與之相抗衡,包括數據庫領域的領
  頭羊甲骨文公司的看家數據庫系統Oracle在內。不可否認,MS SQL Server最大的缺陷就是只能運行
  在微軟自己的操作系統上面,這一點是MS SQL Server的致命傷口。但在另一方面卻也成了最好的促進劑,
  促使MS SQL Server在自己僅有的“土地”上面將自己的功能發揮到了極至,最大限度的利用了Windo
  wsNT系列操作系統的各種潛能!作為MS SQL Server數據庫系統中很重要的一個概念就是存儲過程,合
  理的使用存儲過程,可以有效的提高程序的性能;並且將商業邏輯封裝在數據庫系統中的存儲過程中,可以大大提高整個
  軟件系統的可維護性,當你的商業邏輯發生了改變的時候,不再需要修改並編譯客戶端應用程序以及重新分發他們到為數
  眾多的用戶手中,你只需要修改位於服務器端的實現相應商業邏輯的存儲過程即可。合理的編寫自己需要的存儲過程,可
  以最大限度的利用MS SQL Server的各種資源。下面我們來共同看看各種編寫MS SQL Server
  存儲過程和使用存儲過程的技巧經驗!
  
    下面我們討論的前提都是您有過一定的MS SQL Server存儲過程的編寫經驗,下面的各種技巧如果沒有
  特別注明,則同時適用於MS SQL Server7.0和MS SQL Server2000。
  
    1、使用OUTPUT類型參數的存儲過程的技巧
  
  一般的存儲過程都是直接返回一段記錄集給調用者,但是有的時候我們只需要一些存儲過程返回的一些參數的值,這時候
  可以指定存儲過程的OUTPUT參數,比如:
  
    Create procedure GetName 
  
    @uid nvarchar(1),
  
    @usernam nvarchar(10)='' output
  
    AS
  
    set @username='hongchao'
  
    GO
  
    在上面的存儲過程當中我們傳遞進的參數是@uid,而參數@username則在調有的時候不需要傳遞進去。
  這樣,存儲過程會返回給我們參數@username的值是‘hongchao’。上面的都比較的容易,需要注意的
  是,當在SQL2000中的時候,如果你的存儲過程只有一個參數,並且這個參數是OUTPUT類型的,你必須在調
  用這個存儲過程的時候給這個參數一個初始的值,否則會出現調用錯誤的情況!
  
    2、在存儲過程中的書寫注意事項
  
    這一點在MS SQL Server7.0和MS SQL Server2000種有些地方是不一樣的,也不
  知道是不是微軟的遺漏,那就是有些系統的關鍵字在不同的版本之間有所不同,比如關鍵字level,同樣的一句話:
  
  select * from users where level=1
  
  在MS SQL Server7當中的存儲過程當中運行沒有絲毫的問題,但是到了MS SQL Server20
  00當中則會出現運行的錯誤,原因就是在於在MS SQL Server2000中“level”被當作了關鍵字
  (奇怪的是SQL7當中也同樣是關鍵字,卻沒問題),所以在SQL2000當中,上面的語句應當改為:
  
  select * from users where [level]=1
  
  從上面的例子中我們可以看到,在你編寫存儲過程的時候,最好在有可能和系統關鍵字的地方使用“[”和“]”將他包
  圍起來,以避免在移植過程中出現的運行錯誤問題。
  
    3、在存儲過程中使用系統存儲過程SP_Executesql的注意事項
  
    我們在編寫自己的存儲過程的時候,往往在很多的情況下,會使用到系統的存儲過程SP_Execute。但是需
  要的注意的是,如果你在這個存儲過程的參數(一般是一段SQL語句)當中進行了臨時Table的操作,那末對於調
  用者來說,這個臨時Table是不可見的,也就是說你無法通過臨時Table來在調用者和被調用者之間傳遞值。解
  決的方法是使用全局臨時Table,也就是“##”開頭的Table。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved