


SQL Server 2005 CLR 功能介紹
CLR的重要性有幾個(gè)比較大的原因。首先,由于SQL Server編程已經(jīng)成熟了,編碼器運(yùn)行在SQL Server 自身可能的限制之中,并且很大程度上依賴(lài)于外部代碼來(lái)執(zhí)行一些繁重的操作。T-SQL (Transact-SQL)在返回?cái)?shù)據(jù)集合方面非常好,但是在其他方面就不是很好了。CLR使得解決問(wèn)題和縮減SQL Server內(nèi)部的數(shù)據(jù)復(fù)制成為可能,通過(guò)在SQL Server中需要完全地分離程序來(lái)努力實(shí)現(xiàn)。.NET操縱代碼以及執(zhí)行速度方面比SQL Server和T-SQL 強(qiáng)得多;.NET中同樣位置的代碼由于是二進(jìn)制,因此其運(yùn)行多次仍然比構(gòu)建為存儲(chǔ)過(guò)程快上許多。
使用CLR的另一個(gè)巨大的好處就是:安全。所有的代碼都是在運(yùn)行之前檢測(cè)類(lèi)型和許可安全的。例如,先前沒(méi)有被寫(xiě)入的內(nèi)存是不會(huì)被請(qǐng)求中的代碼訪(fǎng)問(wèn)的。CLR還非常的完善;.NET框架中的素有的東西都可以在存儲(chǔ)過(guò)程、觸發(fā)器或者用戶(hù)函數(shù)中進(jìn)行訪(fǎng)問(wèn)——除了處理類(lèi)似用戶(hù)界面的類(lèi),這些類(lèi)在SQL Server中沒(méi)有用處。
為了避免CLR的瘋狂運(yùn)行,微軟創(chuàng)建了一個(gè)三層的安全模型,規(guī)定了CLR代碼是如何調(diào)用的:安全、外部訪(fǎng)問(wèn)和不安全(SAFE, EXTERNAL_ACCESS and UNSAFE)。安全權(quán)限設(shè)置與傳統(tǒng)的可以執(zhí)行的存儲(chǔ)過(guò)程一樣重要。它不可以被SQL Server自身之外的任何東西修改。外部訪(fǎng)問(wèn)允許通過(guò).NET來(lái)訪(fǎng)問(wèn)注冊(cè)表和文件系統(tǒng)。不安全的命名很恰當(dāng)。被標(biāo)記為不安全的代碼不能做任何事情,并且他們實(shí)際上在調(diào)試或者試驗(yàn)環(huán)境之外無(wú)法使用。大多數(shù)的編程人員都不需要使用高于外部訪(fǎng)問(wèn)的東西。(如果你需要在存儲(chǔ)過(guò)程或者函數(shù)的環(huán)境內(nèi)訪(fǎng)問(wèn)文件系統(tǒng)或者注冊(cè)表,那么很有可能標(biāo)記著你需要重新考慮你正在做的事情的邏輯了。)
然而,CLR并不適合所有的東西。有一件事,它可能最適合那些不輕松、需要編程的、在T-SQL 中實(shí)現(xiàn)的環(huán)境。許多簡(jiǎn)單的操作可以作為T(mén)-SQL中的存儲(chǔ)過(guò)程完成,并不需要做成外部處理。這意味著上下文替換和額外的事務(wù)負(fù)擔(dān),這兩項(xiàng)中的每一項(xiàng)都會(huì)抵消你使用CLR帶來(lái)的最主要的速度的提升。CLR用于替換擴(kuò)展存儲(chǔ)過(guò)程是最好的——例如,那些與數(shù)據(jù)庫(kù)關(guān)系密切,但是T-SQL 處理起來(lái)過(guò)于繁瑣的,并且很難輕松地移動(dòng)到事物的業(yè)務(wù)邏輯端的。
還有一個(gè)可能的不利是:正如SQL 的領(lǐng)袖Rod Paddock 在他的blog里面指出的,如果你將業(yè)務(wù)邏輯的某個(gè)部分移動(dòng)到更接近數(shù)據(jù)庫(kù),那么有可能引起可測(cè)量性的問(wèn)題。不管怎么說(shuō),SQL Server都更適合按比例擴(kuò)大地放在單個(gè)的大型機(jī)上,而不是分布在多個(gè)較小的機(jī)器上(這通常是業(yè)務(wù)邏輯的測(cè)量方式S)。以上指出了有選擇地使用CLR是多么的重要。T-SQL 非常緊湊并且有效率;CLR/.NET 具有擴(kuò)展性和包容性。正確的工作是采用正確的工具,雖然擁有很多的選擇是多么好的一件事情。
關(guān)鍵字:SQL Server 2005、CLR、觸發(fā)器、數(shù)據(jù)集合
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶(hù)
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶(hù)的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解