SQL Server 2005中的CLR集成(3)_Mssql數(shù)據(jù)庫教程
推薦:SQL SQL Server 2008中的新日期數(shù)據(jù)類型這篇文章主要介紹了Oracle數(shù)據(jù)庫到SQL Server數(shù)據(jù)庫主鍵的遷移過程,具體內(nèi)容請(qǐng)參考下文。 由于項(xiàng)目需要要將以前Oracle的數(shù)據(jù)庫轉(zhuǎn)化為SQL Server,今天利用SQL Server的DTD進(jìn)行數(shù)據(jù)庫的遷移,但導(dǎo)入以后發(fā)現(xiàn)只導(dǎo)入了表結(jié)構(gòu)和數(shù)據(jù),而表的一些主鍵約束都沒導(dǎo)過
|
以下為引用的內(nèi)容: Enter Category ID: |
正如這個(gè)示例所示,調(diào)用CLR存儲(chǔ)過程與調(diào)用T-SQL存儲(chǔ)過程沒有任何不同。二者都按照相同的步驟,而沒有任何改變。結(jié)果應(yīng)該顯示Production.Product表中Name和ProductNumber列的所有記錄。在這個(gè)示例中,返回了Name和ProductNumber列的所有行,因?yàn)椴樵儧]有為返回單個(gè)行而設(shè)置特定ProductID。因此,返回所有行。
4.2 SQL Server中的T-SQL和受管代碼
一種很吸引人的想法是認(rèn)為,開發(fā)人員能夠避免編寫業(yè)務(wù)層,而在SQL Server中使用受管代碼編寫所有代碼。然而,重要的是記住SQLCLR不是用于代替業(yè)務(wù)層。因此,正由于能夠在SQL Server中編寫C#或者VB.NET代碼,所以不希望將SQL Server作為托管所有.NET代碼的應(yīng)用程序服務(wù)器。SQLCLR是專用于在SQL Server中實(shí)現(xiàn)特定目的,而此時(shí)T-SQL可能不是正確的選擇。
注意,開發(fā)人員應(yīng)該將SQLCLR作為一種無法使用T-SQL顯式表達(dá)邏輯的備選解決方案——也不能作為實(shí)現(xiàn)業(yè)務(wù)層邏輯的替代品。那么根據(jù)這個(gè)規(guī)則,開發(fā)人員應(yīng)該首先使用T-SQL解決問題。
T-SQL比較適合基于集合的操作,例如表格式數(shù)據(jù),SQLCLR比較適合實(shí)現(xiàn)過程性代碼和遞歸操作。然而,真正是否更加適合取決于多種因素。通過以下三條規(guī)則可很好的比較總結(jié)T-SQL和SQLCLR:(1)基于集合的操作最好使用T-SQL。(2)使用程序性和遞歸代碼最好使用SQLCLR。(3)存在多個(gè)有關(guān)因素可能影響以上兩條規(guī)則,例如編譯CLR代碼和解釋性的T-SQL代碼,在SQL Server中加載時(shí)的開銷,過程中所需的數(shù)據(jù)訪問,輔助函數(shù)庫等等。這種情況由存在多種原因造成,其中多數(shù)由于數(shù)據(jù)庫內(nèi)部的CLR與Windows計(jì)算機(jī)中的CLR受到了不同的約束限制。Windows計(jì)算機(jī)中的CLR由操作系統(tǒng)來運(yùn)行,其與SQL Server中運(yùn)行的同一CLR不同。主要的不同點(diǎn)是SQL Server所擔(dān)負(fù)的責(zé)任,管理線程調(diào)用,同步,鎖定和內(nèi)存位置等方面。
Windows計(jì)算機(jī)中的CLR和SQL Server中的CLR之間的另一個(gè)重要不同是,用于加載CLR的引導(dǎo)機(jī)制。SQL Server 2005除非在需要的情況下,否則不會(huì)加載CLR。這是因?yàn)镾QL Server遵循了保護(hù)內(nèi)存,盡量加載任何所需資源的規(guī)則。根據(jù)除非需要,否則不加載CLR的原則,可節(jié)約CLR本來要占據(jù)的數(shù)兆字節(jié)內(nèi)存空間。因此,如果有少量使用CLR的代碼片段,同時(shí)加載CLR,那么由此可能會(huì)影響特定計(jì)算機(jī)的其他操作。
將這樣的責(zé)任都委托給宿主(SQL Server)反而會(huì)帶來有趣的挑戰(zhàn)。就本質(zhì)而言,這意味著運(yùn)行在SQL Server內(nèi)部的個(gè)別操作此時(shí)可能被認(rèn)為具有一定欺詐性,是一個(gè)潛在的安全線程,或者可能降低服務(wù)器安全性。因此,當(dāng)自由使用CLR及其各種操作時(shí),則變得有些危險(xiǎn),那么SQL Server應(yīng)用程序則以一定方式正確的自己實(shí)現(xiàn),即個(gè)別應(yīng)用程序不應(yīng)該以任何方式忽略或者暗中損害服務(wù)器。
通過對(duì)SQL Server內(nèi)部能夠執(zhí)行的.NET代碼操作集合的粒度控制能夠強(qiáng)制SQL Server實(shí)現(xiàn)以上內(nèi)容。這種機(jī)制構(gòu)建于代碼訪問安全(Code Access Security,縮寫為CAS)之上,它是CLR的一部分。微軟開發(fā)人員要花費(fèi)長時(shí)間艱難的查看.NET Framework中的每個(gè)類,將它們分為三種類別(SAFE,EXTERNAL_ACCESS和UNSAFE),這些類別在上面的內(nèi)容中已經(jīng)介紹了。換言之,開發(fā)人員需要告訴SQL Server,根據(jù)所設(shè)置操作,代碼將按照三種類別之一執(zhí)行。如果代碼試圖進(jìn)行一些初始化設(shè)置之外的事情,那么SQL Server會(huì)阻止其執(zhí)行。
小結(jié)
本文重點(diǎn)對(duì)SQL Server 2005中的CLR集成功能進(jìn)行了講解。這的確是一種非常吸引開發(fā)人員的功能,能夠大幅提高開發(fā)效率,減低應(yīng)用程序的維護(hù)修改強(qiáng)度。希望開發(fā)人員能夠熟練的使用這項(xiàng)功能。
分享:解析SQL Server 2008性能和可擴(kuò)展性1.導(dǎo)言 現(xiàn)今的公司需要易訪問的和可用性好的商業(yè)數(shù)據(jù),以便他們可以在全球市場中獲得一席之地。與易訪問數(shù)據(jù)的這個(gè)需求相呼應(yīng)的,關(guān)系數(shù)據(jù)庫和分析數(shù)據(jù)庫在規(guī)模方面繼續(xù)發(fā)展,內(nèi)嵌數(shù)據(jù)庫和許多產(chǎn)品一起出現(xiàn),并且許多公司將服務(wù)器合并來減輕管理工作。當(dāng)公司
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- SQL Server游標(biāo)的使用/關(guān)閉/釋放/優(yōu)化小結(jié)
- 談SQL Server數(shù)據(jù)庫管理常用的SQL和T-SQL語句
- 解決sql server查詢速度慢11個(gè)方法
- SQL Server 中易混淆的數(shù)據(jù)類型
- 怎樣讓SQL Server加速運(yùn)行
- SQL Server記錄輪班的技巧
- SQL Server連接中常見錯(cuò)誤的解決方法
- 解析數(shù)據(jù)庫大戰(zhàn): MS SQL Server IBM DB2
- 獲取SQL Server表字段的各種屬性實(shí)例代碼
- 解析SQL Server數(shù)據(jù)庫觸發(fā)器的安全隱患
猜你也喜歡看這些
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- Mysql select in 按id排序?qū)崿F(xiàn)方法
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫以及函數(shù)、存儲(chǔ)過程的介紹
- mysql 按照時(shí)間段來獲取數(shù)據(jù)的方法
- MySQL 主主同步配置步驟
- MSSQL清空日志刪除日志文件
- MySQL數(shù)據(jù)庫備份和還原的常用命令
- MySQL:數(shù)據(jù)庫知識(shí)點(diǎn)
- 解決bash: mysql: command not found 的方法
- 關(guān)于Mysql查詢帶單引號(hào)及插入帶單引號(hào)字符串問題
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-SQL Server 2005中的CLR集成(3)
。