传统上,存储过程逻辑是用SQL编写的,但SQL Server 2005引入了使用CLR代码编写程序的能力。微软有时将这种技术称为SQL CLR,即用于将CLR程序集加载到SQL Server中的技术。在SQL CLR之前,只能使用难以构建和维护的C++ DLL来扩展SQL Server。
在VistaDB 3的开发周期早期就实现了SQL CLR程序集,允许用户使用编写应用程序的相同语言(C#或VB.NET)来扩展他们的数据库。在升级到VistaDB 4时,确定了一些想要对CLR程序进行的小改动,以使它们与SQL Server更加兼容,并使构建一个与VistaDB和SQL Server都兼容的程序集成为可能,只需重新编译(无需重大代码更改)。通过添加一个新的命名空间实现了这一目标:
VistaDB.Compatibility.SqlServer
高级概述:
CLR程序和CLR函数都只是程序集中的public static
方法。整个程序集被加载到数据库中,程序在引擎内部运行。需要注意的是,程序集的任何外部依赖项都不会被加载到数据库中。SQL Server这样做,但不这样做,因为这会导致复杂的数字版权法问题,不想卷入其中。
应用程序仍然可以进行xcopy部署,而不需要包含方法的程序集。这对于部署非常有用,但在开发过程中可能会令人困惑。仅仅因为重新构建了DLL并不意味着数据库有最新版本。每次编译后,必须在数据库中更新程序集以加载它。
需要SQL不支持的特殊数学函数吗?想要处理SQL不处理的存储类型吗?想要编写一个触发器来完成传统SQL触发器无法完成的事情吗?想要在DNS中查找域名吗?使用CLR程序来处理诸如专业加密、归档、远程连接、专业业务逻辑、拉取RSS源、从另一个数据库请求数据、对域中的用户进行身份验证等事情。
任何可以在托管代码中做的事情都可以在CLR程序中完成。
CLR程序在许多数据库管理员中仍然被视为有些可疑。认为这主要是因为他们看不到函数将要做什么,所以有些失去控制的恐惧。必须由管理员在SQL Server上启用CLR集成才能工作。VistaDB始终支持CLR程序,因为生活在应用程序中,对来说没有安全问题。