在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')