SQL Sever 2005创建 CLR 存储过程

来源:互联网 发布:2016淘宝最近生意不好 编辑:程序博客网 时间:2024/04/26 01:05

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办 电脑酷狗音乐打不开怎么办 酷狗音乐无法运行播放怎么办? 酷狗音乐停止运行怎么办 米6蓝牙声音小怎么办 手里酷狗id丢了怎么办 连麦声音不好听怎么办 微信语音声音很难听怎么办 微信聊天语音没有声音怎么办 微信发语音声音不好听怎么办 微信语音说话不好听怎么办 微信字体变粗怎么办 笔记本无法识别usb设备怎么办 手机qq音乐闪退怎么办 qq音乐总是闪退怎么办 手机qq音乐闪退怎么办修复 苹果7p耳机漏音怎么办 akgn25耳机盖掉了怎么办 外汇平台跑路了怎么办 微云资料没了怎么办 酷狗k歌有杂音怎么办