升级理由二:可编程性
CLR 集成
SQL Server 2005的可编程性是值得升级的第二个重要理由。从来没有哪一个版本能像SQL Server 2005 这样带来这么多编程方面的变革。说老实话,在我知道的瞬间我是惊呆了。有些变化是革命性的。如CLR(Common Language Runtime,公共语言运行时)集成。就先说说CLR集成。CLR集成是指你可以使用任何一种.NET 语言编写SQL Server 2005 的存储过程,触发器,函数,自定义类型,甚至是自定义的聚合函数。估计不少数据库软件开发商会为这个功能欢呼雀跃。想想以前的扩展存储过程,编程非常不容易。代码中一不小心就会引起内存泄漏。而且由于扩展存储过程运行在SQL Server 的进程空间中,不好的代码容易引起访问违规(Access Violation)导致SQLServer 异常。
现在有了CLR 集成,你可以轻松利用.NET语言的优势如其面向对象的封装、继承和多态特性,编写出那些需要对数据进行复杂数值计算或逻辑的代码,如字符串处理,数据加密算法,XML数据操作等等。由于CLR代码宿于SQL Server进程,你可以非常容易访问数据库中的数据。有了CLR,你不再局限于T-SQL,你现在立即拥有了.NET 框架类库提供的各种各样的类和例程,以及.NET语言提供的一致的编程模型,如错误处理。展现在你面前的是一个可以无限扩展的编程空间。你现在需要的仅仅是考虑什么时候使用T-SQL 语言,什么时候使用CLR。我猜测那些SQL Server软件开发商几乎会立即升级到SQLServer 2005 享受数据库编程的便捷。
T-SQL 语言增强
SQL Server 2005 中的T-SQL语言有了非常大的改进。其中笔者最为称道的是现在可以使用和C++或C#类似的TRYCATCH结构对T-SQL 进行错误处理了,大大简化了T-SQL错误处理编程。SQL Server 2005以前的版本通过设置@@error变量表示最后的T-SQL 语句执行成功与否。为避免@@error变量被新执行的语句重置,你必须为每一条可能出错的TSQL语句后面立即检查或保存@@error变量的值,并使用相应的G O T O 语句进行跳转,使得代码变得复杂难读。现在SQLServer 2005 有了TRY-CATCH结构你只需要把相关的一组语句放在TRY块里面即可。如果TRY块里面任何语句发生错误,就会执行相应的CATCH 块。你甚至可以使用嵌套的TRYCATCH来实现复杂错误处理流程。估计很多T-SQL语言使用者可能就为了这个TRY-CATCH 结构而迫不及待地升级到SQL Server 2005。
除了传统的DML(INSERT/UPDATE/DELETE)触发器,SQL Server 2005 现在也可以对DDL 语言(CREATE、ALTER或DROP 开头的语句)创建触发器了。这对于那些需要对DDL语言执行管理任务如审核以及规范数据库操作的用户特别有用。以前很多客户问我如何跟踪或避免表的删除操作,现在终于有了答案。你可以简单建立一个针对DROP 语句的触发器然后在触发器里面ROLLBACK 事务就可以回滚DROP 动作了。
SQL Server 2005 T-SQL 中还有一个很酷的OUTPUT 子句。现在你不费吹灰之力就可以获得INSERT 、UPDATE 或DELETE语句所影响的每行的信息。对于在INSERT或UPDATE操作之后需要检索标识列或计算列的值的场合OUTPUT子句非常有用。如获得数据INSERT 后该行的Identity的值,产生一些唯一流水号,验证刚刚插入的数据等等。一个有趣的例子是Identity值的取得。在SQL Server 2000 中你可以在INSERT 语句后立即调用IDENT_CURRENT()或SCOPE_IDENTITY()函数来得到INSERT 语句的Identity。现在你仅仅需要在INSERT 语句中指定output子句就直接得到刚刚插入的Identity值,实在太简单了,不是吗?
SQL Server 2005 中T-SQL 语言新增或加强的功能还有很多。如SQL Server 2005 新增加了一类排名函数RANK/DENSE_RANK/NTILE/ROW_NUMBER,轻松解决了开发者要求返回数据行中提供行号等排序功能。新增的P I V O T 和UNPIVOT运算符使得对结果集进行行和列的旋转变换十分简单。公用表表达式(CTE)解决了T-SQL语言的递归查询问题,而使用OPENROWSET 语句现在可以直接从文件里面执行大容量操作了。我觉得每一个改进都是那么有针对性,以至于使我相信这些T-SQL增强必定是SQL Server开发小组真正聆听数据库开发者心声的结果。
升级到SQL Server 2005 的十大理由
0
相关文章