SQL Server 2005中的CLR集成(3)_Mssql数据库教程
推荐:SQL SQL Server 2008中的新日期数据类型这篇文章主要介绍了Oracle数据库到SQL Server数据库主键的迁移过程,具体内容请参考下文。 由于项目需要要将以前Oracle的数据库转化为SQL Server,今天利用SQL Server的DTD进行数据库的迁移,但导入以后发现只导入了表结构和数据,而表的一些主键约束都没导过
以下为引用的内容: Enter Category ID: |
正如这个示例所示,调用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.导言 现今的公司需要易访问的和可用性好的商业数据,以便他们可以在全球市场中获得一席之地。与易访问数据的这个需求相呼应的,关系数据库和分析数据库在规模方面继续发展,内嵌数据库和许多产品一起出现,并且许多公司将服务器合并来减轻管理工作。当公司
- 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 不允许保存更改,您所做的更改要求删除并重新创建以下表
- SQL Server 2008 清空删除日志文件(瞬间日志变几M)
- Win7系统安装MySQL5.5.21图解教程
- 将DataTable作为存储过程参数的用法实例详解
- 相关链接:
- 教程说明:
Mssql数据库教程-SQL Server 2005中的CLR集成(3)。