国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

SQLServer存儲過程編程經(jīng)驗技巧

時間:2008-11-15 20:24:00   來源:無憂考網(wǎng)     [字體: ]
SQLServer目前正日益成為WindowNT操作系統(tǒng)上面最為重要的一種數(shù)據(jù)庫管理系統(tǒng),隨著 SQLServer2000的推出,微軟的這種數(shù)據(jù)庫服務系統(tǒng)真正的實現(xiàn)了在WindowsNT/2000系列操作系統(tǒng)一統(tǒng)天下的局面,在微軟的操作系統(tǒng)上面,沒有任何一種數(shù)據(jù)庫系統(tǒng)能與之相抗衡,包括數(shù)據(jù)庫領域的領頭羊甲骨文公司的看家數(shù)據(jù)庫系統(tǒng)Oracle在內(nèi)。不可否認,SQL Server的缺陷就是只能運行在微軟自己的操作系統(tǒng)上面,這一點是SQLServer的致命傷口。但在另一方面卻也成了的促進劑,促使SQLServer在自己僅有的“土地”上面將自己的功能發(fā)揮到了極至,限度的利用了NT系列操作系統(tǒng)的各種潛能!作為SQLServer數(shù)據(jù)庫系統(tǒng)中很重要的一個概念就是存儲過程,合理的使用存儲過程,可以有效的提高程序的性能;并且將商業(yè)邏輯封裝在數(shù)據(jù)庫系統(tǒng)中的存儲過程中,可以大大提高整個軟件系統(tǒng)的可維護性,當你的商業(yè)邏輯發(fā)生了改變的時候,不再需要修改并編譯客戶端應用程序以及重新分發(fā)他們到為數(shù)眾多的用戶手中,你只需要修改位于服務器端的實現(xiàn)相應商業(yè)邏輯的存儲過程即可。合理的編寫自己需要的存儲過程,可以限度的利用SQLServer的各種資源。下面我們來共同看看各種編寫SQLServer存儲過程和使用存儲過程的技巧經(jīng)驗!

  下面我們討論的前提都是您有過一定的SQLServer存儲過程的編寫經(jīng)驗,下面的各種技巧如果沒有特別注明,則同時適用于SQLServer7.0和SQLServer2000。

  1、使用OUTPUT類型參數(shù)的存儲過程的技巧

一般的存儲過程都是直接返回一段記錄集給調(diào)用者,但是有的時候我們只需要一些存儲過程返回的一些參數(shù)的值,這時候可以指定存儲過程的OUTPUT參數(shù),比如:

 。茫颍澹幔簦濉。穑颍铮悖澹洌酰颍濉。牵澹簦危幔恚濉

 。溃酰椋洹。睿觯幔颍悖瑁幔颍ǎ保,

  @usernam。睿觯幔颍悖瑁幔颍ǎ保埃剑ВА。铮酰簦穑酰

 。粒

 。螅澹簟。溃酰螅澹颍睿幔恚澹剑В瑁铮睿纾悖瑁幔铮

  GO

  在上面的存儲過程當中我們傳遞進的參數(shù)是@uid,而參數(shù)@username則在調(diào)有的時候不需要傳遞進去。這樣,存儲過程會返回給我們參數(shù)@username的值是‘hongchao’。上面的都比較的容易,需要注意的是,當在SQL2000中的時候,如果你的存儲過程只有一個參數(shù),并且這個參數(shù)是OUTPUT類型的,你必須在調(diào)用這個存儲過程的時候給這個參數(shù)一個初始的值,否則會出現(xiàn)調(diào)用錯誤的情況!

 。、在存儲過程中的書寫注意事項

  這一點在SQLServer7.0和SQLServer2000中有些地方是不一樣的,也不
知道是不是微軟的遺漏,那就是有些系統(tǒng)的關鍵字在不同的版本之間有所不同,比如關鍵字level,同樣的一句話:

select *。妫颍铮怼。酰螅澹颍蟆。鳎瑁澹颍濉。欤澹觯澹欤剑

在SQLServer7當中的存儲過程當中運行沒有絲毫的問題,但是到了SQLServer2000當中則會出現(xiàn)運行的錯誤,原因就是在于在SQLServer2000中“level”被當作了關鍵字(奇怪的是SQL7當中也同樣是關鍵字,卻沒問題),所以在SQL2000當中,上面的語句應當改為:

select。。妫颍铮怼。酰螅澹颍蟆。鳎瑁澹颍濉。郏欤澹觯澹欤荩剑

從上面的例子中我們可以看到,在你編寫存儲過程的時候,在有可能和系統(tǒng)關鍵字的地方使用“[”和“]”將他包圍起來,以避免在移植過程中出現(xiàn)的運行錯誤問題。

 。场⒃诖鎯^程中使用系統(tǒng)存儲過程SP_Executesql的注意事項

  我們在編寫自己的存儲過程的時候,往往在很多的情況下,會使用到系統(tǒng)的存儲過程SP_Execute。但是需要的注意的是,如果你在這個存儲過程的參數(shù)(一般是一段SQL語句)當中進行了臨時Table的操作,那末對于調(diào)用者來說,這個臨時Table是不可見的,也就是說你無法通過臨時Table來在調(diào)用者和被調(diào)用者之間傳遞值。解決的方法是使用全局臨時Table,也就是“#!遍_頭的Table。

 。础⒃诖鎯^程中使用臨時Table和游標的注意事項

  如果我們的商業(yè)邏輯比較復雜,在存儲過程當中,就需要一些媒介作為中轉臺,這時候臨時表j就發(fā)揮了作用,但是請務必記得在使用完之后,即時刪除使用到的臨時Table。

  而在存儲過程當中想要依次遍歷一個記錄集的方法就是使用系統(tǒng)游標,同樣要注意的是,在使用完成之后及時關閉和銷毀游標對象釋放他用到的資源。并且不在萬不得已的情況下,不要隨意使用游標,因為他會占用較多的系統(tǒng)資源,尤其是對于大并發(fā)量的情況下,很容易使得系統(tǒng)資源耗盡而崩潰。

  使用臨時Table和游標各有利弊,在使用的過程中要適當?shù)睦眉纯桑?