研究了半天的SqlServer2005 CLR 编程。
主要参考了来自http://www.sqldbatips.com/showarticle.asp?ID=22的文章《Introducing CLR Stored Procedures in SQL Server 2005》。
归纳一下步骤:
1、用C#或其他高级语言编写一个类,在命令行下编译生成支持Sql Server的dll。
2、在SQL中执行create assembly命令生成组件。
3、创建存储过程调用组件。
4、执行存储过程显示结果。
C#代码如下:
using System;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class TestClass
{
public static void HelloWorld()
{
//Here we get get a handle to the client output buffer
SqlPipe sqlP = SqlContext.Pipe;
//And simply send back a string
sqlP.Send("Hello World from SQLCLR !!");
}
}
编译C#的命令:(注意不能换行)
csc /target:library e:/TestClass.cs /r:"D:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn/sqlaccess.dll"
创建assembly的命令:
create assembly Hello from 'e:/TestClass.dll'
with permission_set = safe
创建stored procedure的命令:
create procedure Hello
as external name Hello.TestClass.HelloWorld
在学习的过程中遇到两个问题:
1、System.Data.SqlServer VS Microsoft.SqlServer.Server
参考的文章中使用的是System.Data.SqlServer,后来查资料才发现这个命名空间已更换为Microsoft.SqlServer.Server
细看那篇文章是发布于2004年的,可能不是正式版的Sql Server2005。
2、执行exec Hello时报错:“Execution of user code in the .NET Framework is disabled. Enable "clr enabled" configuration
option.”
因为sql默认是clr关闭状态。也不知道在哪去设置,所幸的是可以用命令啊:
sp_configure 'clr enabled', 1
go
reconfigure
go
至此,再执行exec Hello时,顺利输出Hello World from SQLCLR !!