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