怎样从SQL Server 2005 CLR存储过程返回结果集
2008-09-05 10:01:56 来源:WEB开发网SqlPipe对象是用来将结果发送给调用者的。SqlContext对象是自动可用的,并提供SqlPipe对象。
SqlMetaData类是用来指定结果集中的一个字段的。我们指定字段名称、类型和大小。我们在这个例子中只返回一个字段,但是你可以返回多个字段。
SqlDataRecord类是用来形成结果集中的一个单独记录的。它被初始化为SqlMetaData对象的数组(例如这些字段)。SetSqlString方法是被调用来基于序列号给每个字段分配值的(例如在SqlMetaData对象数组中的索引)。
SqlPipe的SendResultsRow方法通过SqlDataRecord对象发回一条记录给调用者。
SqlPipe的SendResultsEnd方法是用来表示结果集结束的。
SqlPipe的Send方法是用来发回一条信息给调用者的。
部署CLR存储过程
上面的示例代码需要进行编译才能通过存储过程来调用。在命令行中执行下面的命令来编译这些代码并创建类库DLL MSSQLTipsCLRLib.dll:
CSC/target:libraryStoredProcedures.cs/out:MSSQLTipsCLRLib.dll
假设你使用的是Microsoft .NET框架的第二版本,那么你可以在C:WINDOWSMicrosoft.NETFrameworkv2.0.50727目录下看到CSC.EXE。
执行下面的T-SQL脚本来创建这个存储过程:
ALTERDATABASEmssqltips
SETTRUSTWORTHYON
GO
USEmssqltips
GO
CREATEASSEMBLYMSSQLTipsCLRLib
FROM'C:mssqltipsMSSQLTipsCLRLib.dll'
WITHPERMISSION_SET=EXTERNAL_ACCESS
GO
CREATEPROCEDUREdbo.GetListOfFiles
@pathNVARCHAR(256)
,@patternNVARCHAR(64)
,@recursiveBIT
AS
EXTERNALNAMEMSSQLTipsCLRLib.StoredProcedures.GetListOfFiles
在编译了这个代码到类库(.dll)之后,CREATE ASSEMBLY命令就被执行了,它将这个DLL与ASSEMBLY数据库对象关联起来。FROM条件从句必须指向DLL的实际路径。PERMISSION_SET必须设置为EXTERNAL_ACCESS,因为.NET代码将访问SQL Server 之外的文件系统。TRUSTWORTHY选项被设置为on,以允许外部访问。最后,CREATE PROCEDURE命令的EXTERNAME NAME将这个集合、类和函数与这个存储过程名称关联起来。
要执行这个存储过程,执行下面的脚本:
EXECdbo.GetListOfFiles'C:mssqltips','*.*',0
你将看到类似于下面的输出,这取决于你选择的文件夹的内容;例如,一个只有一列、每一行是一个文件的结果集:
图2
接下来的步骤
在这里下载示例脚本并执行从一个CLR存储过程返回结果集。
记住,当在Microsoft .NET框架中有满足你需求的函数时,使用SQL Server的CLR可能是个很好的解决方法。
Visual Studio 2005有一个SQL Server项目模板,它可以简化CLR集成代码的开发和部署。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››怎样开启主流浏览器“禁止跟踪”功能(以IE10为例)...
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››怎样更改Win8账户头像?
更多精彩
赞助商链接