SQLCLR(二)存储过程和自定义函数
2009-03-30 10:25:52 来源:WEB开发网执行存储过程
DECLARE @name nvarchar(4000)
DECLARE @outstr nvarchar(4000)
set @name='david fan'
-- TODO: 在此处设置参数值。
EXECUTE [TestProject].[dbo].[TestStoredProcedure]
@name
,@outstr OUTPUT
print @outstr
结果如下
输出参数返回值
自定义函数
一,TVF函数
示例函数的作用是搜索目录下的某一类型的文件
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.IO;
using System.Security.Principal;
public partial class UserDefinedFunctions
{
//需要返回一个表时用TVF(streaming table-valued function)
//可以用select from 语句查询这个方法的返回
//TVF需要返回Ienumerable接口,例如:Array,这里返回一个数组
//FillRowMethodName为填充表行的方法
//TableDefinition为表结构,对应FillRowMethodName方法的参数
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "BuildRow",
TableDefinition = "Name nvarchar(32), Length bigint, Modified DateTime")]
public static IEnumerable FileListCs(string directoryName, string pattern)
{
FileInfo[] files;
//模拟当前SQL安全上下文
WindowsImpersonationContext OriginalContext= SqlContext.WindowsIdentity.Impersonate();
try
{
DirectoryInfo di = new DirectoryInfo(directoryName);
files = di.GetFiles(pattern);
}
finally
{
if (OriginalContext != null)
{
OriginalContext.Undo();
}
}
return files;
}
public static void BuildRow(object Obj,
ref SqlString fileName,
ref SqlInt64 fileLength,
ref SqlDateTime fileModified)
{
if (Obj != null)
{
FileInfo file = (FileInfo)Obj;
fileName = file.Name;
fileLength = file.Length;
fileModified = file.LastWriteTime;
}
else
{
fileName = SqlString.Null;
fileLength = SqlInt64.Null;
fileModified = SqlDateTime.Null;
}
}
}
更多精彩
赞助商链接