在SQLServer 2005中編寫存儲(chǔ)過程
1、為什么我們必須使用CLR模式來(lái)編寫存儲(chǔ)過程呢?
主要原因是速度。SQL CLR在很多方式下都運(yùn)行較快:比如字符串處理,它比T-SQL運(yùn)行快很多,并且對(duì)于錯(cuò)誤的處理能力也更加強(qiáng)大。同時(shí),由于CLR所提供的來(lái)執(zhí)行這些事務(wù)的框架都更為完善,因此任何需要與數(shù)據(jù)庫(kù)之外資源進(jìn)行事務(wù)交互的存儲(chǔ)過程——比如,文件系統(tǒng)或者Web服務(wù)——CLR SP都是表現(xiàn)最好的。
2、CLR最適合編寫哪些類型的存儲(chǔ)過程?
一般來(lái)說,在數(shù)據(jù)上執(zhí)行繁重計(jì)算而不是僅僅是查詢數(shù)據(jù)的SP最適合用CLR。如果一個(gè)CLR SP只是封裝一個(gè)復(fù)雜的SELECT語(yǔ)句,那么我們將無(wú)法看到顯著的性能增益,因?yàn)槊看芜\(yùn)行SP時(shí),都必須驗(yàn)證CLR中的SQL語(yǔ)句。事實(shí)上,它比僅將SELECT語(yǔ)句作為T-SQL SP處理表現(xiàn)還要差。
一個(gè)經(jīng)典的好方法是:如果需要執(zhí)行的SQL的行數(shù)很多,那么可以將SQL封裝在一個(gè)常規(guī)的SP上。如果想要在一個(gè)大的數(shù)據(jù)集上運(yùn)行CLR風(fēng)格的處理,那么我們可以在CLR SP內(nèi)部調(diào)用一個(gè)常規(guī)的SP來(lái)獲取這個(gè)大的數(shù)據(jù)集。這樣,常規(guī)的SP會(huì)被預(yù)編譯,性能也會(huì)更好,同時(shí)數(shù)據(jù)轉(zhuǎn)換性能也會(huì)有所提高。
注意:這種情況是假定我們需要在數(shù)據(jù)層上進(jìn)行復(fù)雜的數(shù)據(jù)處理,而不是在顯示層上。事實(shí)上我們?cè)诰帉懘a之前就需要考慮這些問題。
3、是否應(yīng)該把現(xiàn)有的存儲(chǔ)過程轉(zhuǎn)換為CLR模式?
簡(jiǎn)單而言,“要有好處才去做”。在這種情況下,可以為指定的存儲(chǔ)過程創(chuàng)建一個(gè)同等的CLR實(shí)現(xiàn)的版本,然后使用實(shí)際數(shù)據(jù)對(duì)兩種SP進(jìn)行測(cè)試。除非我們可以確定新的存儲(chǔ)過程:(a)按照預(yù)計(jì)的方式運(yùn)行,(b)對(duì)性能有實(shí)際的提升,否則應(yīng)該繼續(xù)使用老的存儲(chǔ)過程。其實(shí)CLR跟其它的存儲(chǔ)過程一樣,沒什么奇特的。
4、在沒有開發(fā)IDE的情況下,可以創(chuàng)建CLR(Common Language Runtime)存儲(chǔ)過程嗎?
當(dāng)然,我們可以通過C#編譯手動(dòng)實(shí)現(xiàn)這類開發(fā)。然而,使用Visual Studio或者類似的IDE可以更簡(jiǎn)單,特別是當(dāng)我們?cè)谡麄€(gè)企業(yè)范圍內(nèi)轉(zhuǎn)換或?qū)崿F(xiàn)大量SP時(shí)。
5、轉(zhuǎn)換有多難?
很明顯,我們必須具備其中一種支持語(yǔ)言的知識(shí),如VB.NET或者C#。事實(shí)上,SQL命令是“封裝”在CLR代碼中的,因此,只要我們知道如何使用它,那么在CLR重新實(shí)現(xiàn)現(xiàn)有的T-SQL是不難的。比較有難度的是如何使用這種語(yǔ)言來(lái)優(yōu)化我們正在做的工作,這個(gè)問題就不是幾個(gè)要點(diǎn)就可以歸納的。
- SqlServer 2000、2005分頁(yè)存儲(chǔ)過程整理
- sqlserver存儲(chǔ)過程語(yǔ)法詳解
- SqlServer獲取存儲(chǔ)過程返回值的實(shí)例
- sqlserver 各種判斷是否存在(表名、函數(shù)、存儲(chǔ)過程等)
- sqlserver 存儲(chǔ)過程帶事務(wù) 拼接id 返回值
- sqlserver 存儲(chǔ)過程動(dòng)態(tài)參數(shù)調(diào)用實(shí)現(xiàn)代碼
- sqlserver 存儲(chǔ)過程分頁(yè)(按多條件排序)
- sqlserver 存儲(chǔ)過程分頁(yè)代碼
- sqlserver 常用存儲(chǔ)過程集錦
- sqlserver 通用分頁(yè)存儲(chǔ)過程
- SQLServer 2005 列所有存儲(chǔ)過程的語(yǔ)句
- 分頁(yè) SQLServer存儲(chǔ)過程
- sql存儲(chǔ)過程幾個(gè)簡(jiǎn)單例子
相關(guān)文章
Windows2003 SQL2005添加系統(tǒng)用戶修改系統(tǒng)登錄密碼
這篇文章主要介紹了Windows2003 SQL2005添加系統(tǒng)用戶修改系統(tǒng)登錄密碼的方法,大家如何忘記了系統(tǒng)的密碼可以試試這個(gè)方法2013-11-11sql server 2005因架構(gòu)無(wú)法刪除用戶錯(cuò)誤15138的解決方法
這篇文章主要介紹了Microsoft SQL Server錯(cuò)誤: 15138刪除對(duì)于用戶失敗,數(shù)據(jù)庫(kù)主體在該數(shù)據(jù)庫(kù)中擁有架構(gòu),無(wú)法刪除問題的解決方法 ,需要的朋友可以參考下2014-07-07Sql Server2005實(shí)現(xiàn)遠(yuǎn)程備份數(shù)據(jù)庫(kù)
相信大家都在當(dāng)心數(shù)據(jù)庫(kù)的丟失,這也是每個(gè)開發(fā)者頭痛的一件事件,因?yàn)檎谶\(yùn)行的服務(wù)器及數(shù)據(jù)庫(kù)也在這臺(tái)服務(wù)器上2014-04-04使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結(jié)構(gòu)的方法
我們經(jīng)常遇到樹型結(jié)構(gòu),把它們顯示在一個(gè)類似TreeView控件上的情況。這時(shí)我們可以使用Recursive Common Table Expressions(CTE)實(shí)現(xiàn)2011-10-10SQLServer Job運(yùn)行成功或失敗時(shí)發(fā)送電子郵件通知的圖文教程
雖然我們可以通過Job日志來(lái)查看SQL Server Job運(yùn)行成功或是失敗,但是人工主動(dòng)去查沒有及時(shí)性,也不智能化。下面簡(jiǎn)單介紹一下如何設(shè)置SQL Server的郵件通知,讓Job完成后,自動(dòng)發(fā)送狀態(tài)郵件。2009-09-09SQL Server 2005通用分頁(yè)存儲(chǔ)過程及多表聯(lián)接應(yīng)用
分頁(yè)存儲(chǔ)過程在好多文章中都有介紹過;本篇是不久前寫的一個(gè)分頁(yè)存儲(chǔ)過程,可應(yīng)用于SQL Server 2005上面,感興趣的朋友可以研究下,希望本文對(duì)你學(xué)習(xí)存儲(chǔ)過程有所幫助2013-01-01MSSQL2005數(shù)據(jù)庫(kù)備份導(dǎo)入MSSQL2000
需要將數(shù)據(jù)從mssql2005轉(zhuǎn)到mssql2000,因?yàn)榘l(fā)現(xiàn)sql2005用起來(lái)并不舒服直接restore或附加應(yīng)該是不行的, 用腳本+導(dǎo)數(shù)據(jù)肯定沒有問題。2008-05-05SQL Server Management Studio Express管理器 沒有導(dǎo)入導(dǎo)出數(shù)據(jù)的向?qū)У慕鉀Q方法
我的SQL2005 Microsoft SQL Server Management Studio Express管理器里,右鍵單擊一個(gè)數(shù)據(jù)庫(kù),指向“任務(wù)”,再單擊“導(dǎo)入數(shù)據(jù)”或“導(dǎo)出數(shù)據(jù)”中沒有這個(gè)選項(xiàng),要想實(shí)現(xiàn)導(dǎo)入/導(dǎo)出數(shù)據(jù),要怎么辦呢?2011-04-04如何在SQL SERVER 2005存儲(chǔ)過程中,使用循環(huán)語(yǔ)句
本篇文章是對(duì)如何在SQL SERVER 2005存儲(chǔ)過程中,使用循環(huán)語(yǔ)句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Sql server 備份還原后出現(xiàn) 受限制用戶 問題
怎么解決Sql Server 2005數(shù)據(jù)庫(kù)備份還原后出現(xiàn)“受限制用戶”,這是大家在數(shù)據(jù)庫(kù)備份還原后經(jīng)常遇到的問題,我們今天就來(lái)探討下.2020-03-03