--
--9.5.1节示例
--
//用于CLR存储过程的C#代码
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
//定义CLR存储过程所在的类,该类的类名是StoredProcedures
public partial class StoredProcedures
{
//使用该Attribute标明函数SayHello是作为CLR存储过程被调用的
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SayHello(SqlString name)//定义静态函数作为CLR存储过程对应函数
{
//定义返回的列名和数据类型
SqlMetaData data=new SqlMetaData("Say",SqlDbType.NVarChar,100);
SqlDataRecord record = new SqlDataRecord(new SqlMetaData[] { data });
if (!name.IsNull)
{
record.SetString(0, "Hello," + name.Value);//设置第一行返回的行内容
}
SqlContext.Pipe.Send(record);//将返回的结果集发生给客户端
}
};
--
--9.5.2节示例
--
--创建CLR存储过程
CREATE PROCEDURE dbo.SayHello --创建CLR存储过程
(
@name nvarchar(10)
)
--以下指定CLR存储过程所在程序集中的位置
AS EXTERNAL NAME [TestSQLAssembly].[StoredProcedures].SayHello
--调用CLR存储过程
EXEC dbo.SayHello @name='ZengYi'
--
--9.5.3节示例
--
//C#实现加法存储过程的函数
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
//定义CLR存储过程所在的类,该类的类名是StoredProcedures
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure] //标明Add静态函数是CLR存储过程用
public static void Add(SqlInt32 a,SqlInt32 b,ref SqlInt32 c)//定义函数
{
if (a.IsNull || b.IsNull) //如果a或b为空,则返回空
c = SqlInt32.Null;
else //将a+b的值付给c
c = new SqlInt32(a.Value + b.Value);
}
};
--创建和使用带OUTPUT参数的CLR存储过程
CREATE PROCEDURE dbo.AddNumber --创建CLR存储过程
(
@a int,
@b int,
@c int output --存储过程第3个参数为OUTPUT类型,与C#中的ref对应
)
--指定CLR存储过程对应函数所在的位置
AS EXTERNAL NAME [TestSQLAssembly].[StoredProcedures].[Add]
GO
--以下是调用CLR存储过程
DECLARE @c int
EXEC dbo.AddNumber 11,22,@c OUTPUT;
PRINT @c