SQL Server 2005引入了一种新的编写数据库对象的方式,使得.NET开发者可以利用CLR存储过程来获取或存储数据,编写触发器、用户定义函数等,并通过SQL Server获得.NET框架的强大功能。本文旨在帮助读者理解如何在SQL Server中构建自己的数据类型和对象。
数据库是存储业务逻辑的理想场所。可以创建存储过程、函数等来构建业务逻辑,以便从应用程序中使用这些接口获取数据,而无需编写插入/更新语句。甚至可以在运行查询之前检查用户权限,如果会话、认证令牌等都存储在数据库中。
扩展存储过程已经存在于早期版本的数据库中。这些对象可以像普通可执行文件一样在系统中执行任何操作。CLR存储过程的主要优势在于:
当调用这些对象时,它首先会去数据库中注册的程序集中找到与调用对象关联的类。然后,它会使用数据库连接的上下文调用该对象。
SQL Server 2005的CLR支持五种类型的对象:
可以根据需要使用它们,并将它们导入数据库引擎。在讨论每种类型之前,首先让在Visual Studio中创建一个示例应用程序。
启动Visual Studio,并选择“新建项目”。将看到“新建项目”对话框。从左侧树形结构中选择“数据库”,然后选择“SQL Server项目”。选择希望的位置并点击“确定”。
接下来,会出现一系列消息框。首先出现的是数据库连接选择框。可以选择数据库连接,也可以选择添加新的引用以添加新的数据库连接。
这个连接将被Visual Studio用于部署应用程序。之后,会出现两个警告消息框:
如果使用的是测试数据库连接,那么只需对这些消息框确认即可。
完成这些步骤后,将创建一个新项目,其中包含一个名为“Test”的文件夹和一个SQL文件。稍后会讨论这个。
在解决方案资源管理器中,会发现一个存储过程文件已经创建好了。可以删除该文件,并根据需求选择一个新的对象。
让首先选择存储过程。
系统会提示输入存储过程的名称。可以随意命名。在示例中,创建了一个名为“MyFirstCLRSP”的类。让在下面编写它的代码:
public partial class StoredProcedures {
[Microsoft.SqlServer.Server.SqlProcedure]
public static void MyFirstCLRSP() {
SqlPipe p;
// Pipe object to send data to Database Engine
p = SqlContext.Pipe;
p.Send("Not Implemented!!");
}
};
编译后,可以通过手动或自动的方式在数据库中运行它。
如果想自动部署,只需在解决方案资源管理器上右键单击 -> 部署解决方案。它将自动部署到数据库。
CREATE ASSEMBLY MyFirstCLRSP FROM 'C:\CLR\CLRproject\CLR\bin\Debug\SqlClassLibrary.dll' WITH PERMISSION_SET = SAFE;