在SQL Server 2005的众多被高度评价的特性中,有一个最适合那些对SQL Server编程的人员的就是通用语言运行时,缩写为CLR(Common Language Runtime)。CLR允许编程人员直接在SQL Server 中创建存储过程,触发器,用户定义函数,集合和类型。CLR有很多的承诺,但是它也具有一些缺陷。
CLR的重要性有几个比较大的原因。首先,由于SQL Server编程已经成熟了,编码器运行在SQL Server 自身可能的限制之中,并且很大程度上依赖于外部代码来执行一些繁重的操作。T-SQL (Transact-SQL)在返回数据集合方面非常好,但是在其他方面就不是很好了。CLR使得解决问题和缩减SQL Server内部的数据复制成为可能,通过在SQL Server中需要完全地分离程序来努力实现。.NET操纵代码以及执行速度方面比SQL Server和T-SQL 强得多;.NET中同样位置的代码由于是二进制,因此其运行多次仍然比构建为存储过程快上许多。
为了避免CLR的疯狂运行,微软创建了一个三层的安全模型,规定了CLR代码是如何调用的:安全、外部访问和不安全(SAFE, EXTERNAL_ACCESS and UNSAFE)。安全权限设置与传统的可以执行的存储过程一样重要。它不可以被SQL Server自身之外的任何东西修改。外部访问允许通过.NET来访问注册表和文件系统。不安全的命名很恰当。被标记为不安全的代码不能做任何事情,并且他们实际上在调试或者试验环境之外无法使用。大多数的编程人员都不需要使用高于外部访问的东西。(如果你需要在存储过程或者函数的环境内访问文件系统或者注册表,那么很有可能标记着你需要重新考虑你正在做的事情的逻辑了。)