关闭

SQL Sever 2005创建 CLR 存储过程

2002人阅读 评论(0) 收藏 举报

在 SQL Server 2005 中,可以在 SQL Server 实例中使用以下方法创建数据库对象:基于 Microsoft .NET Framework 公共语言运行时 (CLR) 创建中的程序集使用编程方法创建。能够利用由 CLR 提供的众多编程模型的数据库对象包括触发器、存储过程、函数、聚合函数和类型。

在 SQL Server 中创建 CLR 存储过程分为下列几个步骤:

  • 使用 .NET Framework 支持的语言将存储过程定义为类的静态方法。有关如何对 CLR 存储过程进行编程的详细信息,请参阅 CLR Stored Procedures。然后,使用适当的语言编译器编译该类,在 .NET Framework 中生成程序集。

  • 使用 CREATE ASSEMBLY 语句在 SQL Server 中注册程序集。有关使用 SQL Server 中的程序集的详细信息,请参阅程序集

  • 通过使用 CREATE PROCEDURE 语句创建引用注册程序集的存储过程。

注意:
默认情况下,关闭 SQL Server 执行 CLR 代码的功能。您可以创建、更改和删除引用托管代码模块的数据库对象,但是除非通过使用 sp_configure (Transact-SQL) 启用了 clr enabled 选项,否则这些引用将不会在 SQL Server 中执行。

--实例

--A: .net 部分

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void SumRvalue(int Rank, out int Svalue)
    {
        //SqlContext.Pipe.Send("Hello world! It's now " + System.DateTime.Now.ToString() + "/n");
        using (SqlConnection connection = new SqlConnection("context connection=true"))
        {
            Svalue = 0;
            connection.Open();
            SqlCommand command = new SqlCommand("SELECT Rvalue FROM TB where Rank=" + Rank + "", connection);
            SqlDataReader reader = command.ExecuteReader();
            //SqlContext.Pipe.Send(reader);
            using (reader)
            {
                while (reader.Read())
                {
                    Svalue += reader.GetInt32(0);
                }
            }        

        }
    }
}

--B:数据库部分

--注册程序集
CREATE ASSEMBLY CLR_PROC_CALCRValue FROM 'D:/IISWebRoot/SQLCLR/SQLFunction/SQLFunction/bin/Debug/SQLFunction.dll'
GO
--创建CLR存储过程
CREATE PROCEDURE SumRvalue(@id int,@out int output )
AS EXTERNAL NAME CLR_PROC_CALCRValue.StoredProcedures.SumRvalue
--测试环境
CREATE TABLE TB(Rank INT,Rvalue INT)
Insert TB (Rank,Rvalue)  Values (1,20)
Insert TB (Rank,Rvalue)  Values (1,30)
Insert TB (Rank,Rvalue)  Values (1,44)
Insert TB (Rank,Rvalue)  Values (2,3)
Insert TB (Rank,Rvalue)  Values (2,3)
Insert TB (Rank,Rvalue)  Values (4,1)
--测试
declare @i int
EXEC SumRvalue 1, @i output
select @i
--结果
-----------
94

(1 行受影响)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:354811次
    • 积分:4619
    • 等级:
    • 排名:第6577名
    • 原创:104篇
    • 转载:2篇
    • 译文:2篇
    • 评论:103条
    最新评论
    朋友网站链接