SQL Server 2005中的CLR集成(3)_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:SQL SQL Server 2008中的新日期数据类型
这篇文章主要介绍了Oracle数据库到SQL Server数据库主键的迁移过程,具体内容请参考下文。 由于项目需要要将以前Oracle的数据库转化为SQL Server,今天利用SQL Server的DTD进行数据库的迁移,但导入以后发现只导入了表结构和数据,而表的一些主键约束都没导过

以下为引用的内容:

Enter Category ID:

AutoGenerateColumns="false" DataSourceID="productSource">

SelectCommand="GetProducts" SelectCommandType="StoredProcedure"
ConnectionString="

正如这个示例所示,调用CLR存储过程与调用T-SQL存储过程没有任何不同。二者都按照相同的步骤,而没有任何改变。结果应该显示Production.Product表中Name和ProductNumber列的所有记录。在这个示例中,返回了Name和ProductNumber列的所有行,因为查询没有为返回单个行而设置特定ProductID。因此,返回所有行。

4.2 SQL Server中的T-SQL和受管代码

一种很吸引人的想法是认为,开发人员能够避免编写业务层,而在SQL Server中使用受管代码编写所有代码。然而,重要的是记住SQLCLR不是用于代替业务层。因此,正由于能够在SQL Server中编写C#或者VB.NET代码,所以不希望将SQL Server作为托管所有.NET代码的应用程序服务器。SQLCLR是专用于在SQL Server中实现特定目的,而此时T-SQL可能不是正确的选择。

注意,开发人员应该将SQLCLR作为一种无法使用T-SQL显式表达逻辑的备选解决方案——也不能作为实现业务层逻辑的替代品。那么根据这个规则,开发人员应该首先使用T-SQL解决问题。

T-SQL比较适合基于集合的操作,例如表格式数据,SQLCLR比较适合实现过程性代码和递归操作。然而,真正是否更加适合取决于多种因素。通过以下三条规则可很好的比较总结T-SQL和SQLCLR:(1)基于集合的操作最好使用T-SQL。(2)使用程序性和递归代码最好使用SQLCLR。(3)存在多个有关因素可能影响以上两条规则,例如编译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遵循了保护内存,尽量加载任何所需资源的规则。根据除非需要,否则不加载CLR的原则,可节约CLR本来要占据的数兆字节内存空间。因此,如果有少量使用CLR的代码片段,同时加载CLR,那么由此可能会影响特定计算机的其他操作。

将这样的责任都委托给宿主(SQL Server)反而会带来有趣的挑战。就本质而言,这意味着运行在SQL Server内部的个别操作此时可能被认为具有一定欺诈性,是一个潜在的安全线程,或者可能降低服务器安全性。因此,当自由使用CLR及其各种操作时,则变得有些危险,那么SQL Server应用程序则以一定方式正确的自己实现,即个别应用程序不应该以任何方式忽略或者暗中损害服务器。

通过对SQL Server内部能够执行的.NET代码操作集合的粒度控制能够强制SQL Server实现以上内容。这种机制构建于代码访问安全(Code Access Security,缩写为CAS)之上,它是CLR的一部分。微软开发人员要花费长时间艰难的查看.NET Framework中的每个类,将它们分为三种类别(SAFE,EXTERNAL_ACCESS和UNSAFE),这些类别在上面的内容中已经介绍了。换言之,开发人员需要告诉SQL Server,根据所设置操作,代码将按照三种类别之一执行。如果代码试图进行一些初始化设置之外的事情,那么SQL Server会阻止其执行。

小结

本文重点对SQL Server 2005中的CLR集成功能进行了讲解。这的确是一种非常吸引开发人员的功能,能够大幅提高开发效率,减低应用程序的维护修改强度。希望开发人员能够熟练的使用这项功能。

分享:解析SQL Server 2008性能和可扩展性
1.导言 现今的公司需要易访问的和可用性好的商业数据,以便他们可以在全球市场中获得一席之地。与易访问数据的这个需求相呼应的,关系数据库和分析数据库在规模方面继续发展,内嵌数据库和许多产品一起出现,并且许多公司将服务器合并来减轻管理工作。当公司

共3页上一页123下一页
来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2009-05-17
相关Mssql数据库教程