SQL存储过程(CLR存储过程)或函数中调用.NET程序集中的方法

在VS2008中创建一个类库,在此类库下新建一个名为SayHelloClass的类,程序集名为SayHello,代码如下:

 

using Microsoft.SqlServer.Server;
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;

namespace SayHello
{
    public class SayHelloClass
    {
        [Microsoft.SqlServer.Server.SqlProcedure()]
        public static void SayHello(ref string greeting)
        {
            SqlMetaData columnInfo = new SqlMetaData("问候", SqlDbType.NVarChar, 12);
            SqlDataRecord greetingRecord = new SqlDataRecord(new SqlMetaData[] { columnInfo });

            greetingRecord.SetString(0, "大家好!");
            // 呼叫 Pipe 对象的 Send 方法将单一数据列结果集(也就是 SqlDataRecord 对象)
            // 直接传送给客户端。
            SqlContext.Pipe.Send(greetingRecord);
            // 将文字符串指派给输出参数。
            greeting = "现在时间是 " + DateTime.Now.ToString();
        }


        public static string HelloWorld(string Name)
        {
            return ("Hello " + Name);
        }

    }
}

 

 

--把DLL注册到SQL Server中,其中路径是程序集的绝对路径
CREATE ASSEMBLY SayHello
FROM 'D:/SayHello.dll'
WITH permission_set = Safe;
GO

 

--实现版本兼容  'tong'为数据库名,sql2005为90,sql2000为80
exec sp_dbcmptlevel 'tong',90
GO

 

--开启SQL Server中的CLR
EXEC sp_configure 'clr enabled', '1';
GO
RECONFIGURE;
GO

 

 

--  一、存储过程中的应用:

--创建储存过程(里面执行.Net程序集里面的方法)
CREATE PROCEDURE dbo.SayHello
(
    @Greeting nvarchar(80) OUTPUT
)
--程序集名.类名.方法名
AS EXTERNAL NAME SayHello.[SayHello.SayHelloClass].SayHello;
GO

 

DECLARE @return_value int, @Greeting nvarchar(80);
-- 执行CLR存储过程并取得传回值与输出变量的值
EXECUTE @return_value = dbo.SayHello  @Greeting = @Greeting OUTPUT;
-- 检视传回值与输出变数的值
SELECT @return_value AS 传回值, @Greeting AS '输出参数 @Greeting 之值';

 

 

--  二、函数中的应用:

--创建函数(里面执行.Net程序集里面的方法)
CREATE FUNCTION dbo.FntHelloWorld
(
   @name nvarchar(200)
)
RETURNS nvarchar(200)
AS EXTERNAL NAME SayHello.[SayHello.SayHelloClass].HelloWorld;

--执行函数


SELECT dbo.FntHelloWorld('Mark')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值