很高兴地告诉你,SQL Server 2005已支持用其他面向对象的语言编写CLR存储过程了。
本文介绍的这个例子,假设有个test数据库,数据库有个架构user,还有一个表test1,然后有个sql登陆用户叫test_user,将这个用户设置成VS2005里面数据库连接的登陆用户。
在VS2005中创建一个项目,类别是SQL Server数据库项目,然后往项目里面添加一个存储过程。
在该文件中创建如下的存储过程:
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SelectAll()
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand("SELECT * FROM [user].test1", connection);
SqlContext.Pipe.ExecuteAndSend(command);
}
}
};
将以上代码保存为:testProcedure.cs。
有二种方法,可以向数据库中添加此存储过程。
方法1,
打开.NET的命令行工具,然后将testProcedure.cs编译成dll程序集testProcedure.dll
csc /t:library /out:testProcedure.dll testProcedure.cs。
接着打开数据库test,在数据库里面的程序集右键菜单中点击“添加新的程序集”项,然后浏览刚刚编译好的testProcedure.dll程序集。
这样就添加了这个程序集,接着新建sql查询,在里面创建一个存储过程如下:
CREATE PROCEDURE [user].SelectAllAS EXTERNAL NAME testProcedure.StoredProcedures.SelectAllGO
执行上述语句后,就在数据库中成功添加了一个CLR存储过程。
注意:以上的测试存储过程是没有参数的,如果有的话,那么数据库中的存储过程原型必须和CLR语言中的原型一样。
推荐使用此方法创建CLRC存储过程。
方法2,
使用VS来自动为sql创建存储过程。
编写一个调试脚本添加到项目里面,脚本可以只是简单执行编好的存储过程。
然后将上面的项目编译并生成然后部署即可,还可以启动调试来完成。
VS会自动为数据库添加相应的存储过程。
还是方法1更加灵活和可靠。
方法2,如果出现错误:用户未能执行存储过程 sp_enable_sql_debug。
可能的原因如下:
1,连接问题。需要有一个到服务器的稳定连接。
2,在服务器上缺少必要的权限。若要在 SQL Server 2005 上调试,运行 Visual Studio 的帐户和用于连接 SQL Server 的帐户都必须是 sysadmin 角色的成员。用于连接 SQL Server 的
帐户要么是 Windows 用户帐户(如果您正在使用 Windows 身份验证),要么是具有用户 ID 和密码的帐户(如果您使用 SQL 身份验证)。
即test_user必须是sysadmin角色才行。
有关sql server 2005中创建CLR存储过程的内容,到这里就介绍完了。
希望大家好好掌握这个sql server 2005中的新东东,与vs相结合,还是不错的。
脚本学堂,祝大家学习进步。