专家谈SQL Server 2005 CLR

在SQL Server 2005的许多被大力推荐的特性里面,有一项可能对那些使用SQLServer 工作的编程人员最实用的是Common Language Runtime,或者简写为CLR。CLR可以让编程人员直接在SQL Server中创建存储过程、触发器,用户自定义函数,集合体和类型。CLR有很多的承诺,但是也有一些缺陷。

关于CLR的重要性有一些主要的原因。首先,随着SQL Server 编程技术的成熟,代码编写人员陷入了SQL Server自身的一些限制之中,并且在很大程度上依赖外部的代码来执行一些繁重的移植。T-SQL (事务处理SQL)在返回数据集方面很好,但是除了这个之外则表现不佳。CLR使得问题的解决有了可能,并且在SQL Server内部进行数据操作,而这些原本需要一个完全独立的程序来实现的。.NET的操作代码和执行速度比SQL Server/T-SQL好得多;.NET中的同一位的代码可以运行更快地运行许多次,当它是二进制的,而不是作为存储过程来构建时。

使用CLR的另一个巨大的好处就是安全。所有的代码都在运行前检测类型和安全权限。例如,先前没有被写入的内存是不允许被问题中的代码读取的。CLR也很完善;.NET框架中的每样东西都可以从存储过程、触发器或者用户函数进行访问——除了处理类似用户接口的类,它在SQL Server是无论如何不会有用的。

要防止CLR代码胡乱运行,微软为CLR代码的调用创建了一个三层的安全模型:SAFE, EXTERNAL_ACCESS 和 UNSAFE。SAFE权限集合在本质上与传统的存储过程能够做的事情一样。在SQL Server之外不能对其进行任何修改。EXTERNAL_ACCESS允许通过.NET对注册表和文件系统进行访问。UNSAFE正如其名。标记为UNSAFE的代码不能做任何事情,并且它实际上是不应该在调试或者实验环境之外使用的。大多数的编程人员应该永远都不需要用到高于EXTERNAL_ACCESS级别的任何东西。(如果你需要在存储过程或者函数的环境中与文件系统或者注册表对话,这有可能意味着你需要重新考虑你尝试的逻辑了。)

然而,CLR并不是适合一切。一方面,它可能适合那些不容易、需要进行编程,在T-SQL中实现的环境。许多简单的操作可以在T-SQL以存储过程的方式完成,并且不需要扩展到外部进程。这意味着上下文交换和额外的事务开销,这两项中的任何一项开销都能首先抹消你使用CLR获得的速度提升。CLR最好用于替代扩展存储过程——例如,那些必须封闭在数据库中,但是却非常麻烦,无法用T-SQL从容完成,同时又不能轻松移动到业务逻辑末尾的事情。

另一个可能的缺点就是:正如SQL的领袖Rod Paddock在他的blog中指出的,如果你讲业务逻辑中的某个元素移动到数据库,那就可能会引起可测量性的问题。毕竟,SQL Server 更适合于按比例提高的单个大型机器,而不是横跨在几个比较小的机器(通常是按照业务比例来的)上。这一点指出了有选择的使用CLR有多重要。T-SQL简洁、有效;CLR/.NET昂贵并且范围广泛。正确的工作选择正确的工具,尽管拥有众多选择也不错。

时间: 2024-11-01 17:54:54

专家谈SQL Server 2005 CLR的相关文章

怎样从SQL Server 2005 CLR存储过程返回结果集

问题 我们有时会遇到关于CLR函数或存储过程的需求.例如我们可能需要调用一个存储过程来获得某一特定文件夹下的文件列表.我们怎样使用CLR将文件列表作为一个标准结果集(例如行和列)返回呢? 专家解答 SQL Server 2005和之后的版本集成了CLR(通用语言运行时),它使得我们可以使用Microsoft .NET代码编写存储过程.触发器.用户友好的函数.用户友好的聚合和用户友好的类型;例如Visual Basic .NET或C#.被增强的各种T-SQL CREATE命令使得我们可以定义一个数

SQL Server 2005 CLR 功能简介

在SQL Server 2005的众多被高度评价的特性中,有一个最适合那些对SQL Server编程的人员的就是通用语言运行时,缩写为CLR(Common Language Runtime).CLR允许编程人员直接在SQL Server 中创建存储过程,触发器,用户定义函数,集合和类型.CLR有很多的承诺,但是它也具有一些缺陷. CLR的重要性有几个比较大的原因.首先,由于SQL Server编程已经成熟了,编码器运行在SQL Server 自身可能的限制之中,并且很大程度上依赖于外部代码来执行

有关SQL Server 2005 CLR

在SQL Server 2005的许多被大力推荐的特性里面,有一项可能对那些使用SQLServer 工作的编程人员最实用的是Common Language Runtime,或者简写为CLR.CLR可以让编程人员直接在SQL Server中创建存储过程.触发器,用户自定义函数,集合体和类型.CLR有很多的承诺,但是也有一些缺陷. 关于CLR的重要性有一些主要的原因.首先,随着SQL Server 编程技术的成熟,代码编写人员陷入了SQL Server自身的一些限制之中,并且在很大程度上依赖外部的代

谈SQL Server 2005中的T-SQL增强

丰富的数据类型 Richer Data Types 1.varchar(max).nvarchar(max)和varbinary(max)数据类型最多可以保存2GB的数据,可以取代text.ntext或image数据类型. CREATE TABLE myTable(id INT,content VARCHAR(MAX)) 2.XML数据类型 XML数据类型允许用户在SQL Server数据库中保存XML片段或文档. 错误处理 Error Handling 1.新的异常处理结构 2.可以捕获和处理

使用 SQL Server 2005中的 CLR 集成

本文描述了数据库应用程序开发人员和架构师如何利用 SQL Server 2005 中的 CLR 集成功能.本文对基于 CLR 的编程方式与 SQL Server 中支持的现有编程模型(如 TransacT-SQL 和扩展存储过程)进行了比较,并且强调了各自相对的优缺点.还提供了一组选择合适的编程替代方法的高级指导,以及一些示例和代码示例. 一.简介 Microsoft 通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显

sql2005-关于sql server 2005 查询语句的问题

问题描述 关于sql server 2005 查询语句的问题 给出四条不同功能的查询语句,请问怎么用类似case语句的结构把它们连接起来形成一条语句,分情况显示查询结果? 解决方案 sql server 查询语句SQL Server 2005 CLR 调用Web Service需要注意的几个问题Sql Server 2005的datetime字段 在PHP中显示问题 解决方案二: 你先弄清楚他们的不同在哪,把这些条件用case区分 解决方案三: 一个表?还是多个表?一个表就where,多个表,需

探讨SQL Server 2005.NET CLR编程

本文将解释如何在SQL Server 2005中以尽可能最简单的方法创建基于.NET的CLR子例程.本文主要针对在服务器端使用SQL Server 2005的.NET开发者. 一.创建SQL Server 2005数据库 这一节主要讨论创建一个将用于本文中的数据库和表格.详见下列步骤: · 执行"Start->Programs->Microsoft SQL Server 2005->SQL Server Management Studio",并使用必要的证书连接到你的

在SQL Server 2005中创建CLR存储过程的详细介绍

在2005之前的版本创建存储过程都是在数据库里面写Transact-SQL语言实现的,不过现在SQL Server 2005支持用其他面向对象的语言编写CLR存储过程了,关于这样做的好处,官方有很多解释了,这里就直接说明实现方法了. 假设服务器里面有个test数据库,数据库有个架构user,还有一个表test1,然后有个sql登陆用户叫test_user,将这个用户设置成VS2005里面数据库连接的登陆用户. 在VS2005中创建一个项目,类别是SQL Server数据库项目,然后往项目里面添加

在SQL Server 2005中创建CLR存储过程的详细介绍_MsSql

在2005之前的版本创建存储过程都是在数据库里面写Transact-SQL语言实现的,不过现在SQL Server 2005支持用其他面向对象的语言编写CLR存储过程了,关于这样做的好处,官方有很多解释了,这里就直接说明实现方法了. 假设服务器里面有个test数据库,数据库有个架构user,还有一个表test1,然后有个sql登陆用户叫test_user,将这个用户设置成VS2005里面数据库连接的登陆用户. 在VS2005中创建一个项目,类别是SQL Server数据库项目,然后往项目里面添加