SQL Sever 2005创建 CLR 存储过程

在 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 行受影响)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值