WEB开发网
开发学院数据库MSSQL Server SQLCLR(二)存储过程和自定义函数 阅读

SQLCLR(二)存储过程和自定义函数

 2009-03-30 10:25:52 来源:WEB开发网   
核心提示: 执行存储过程DECLARE @name nvarchar(4000)DECLARE @outstr nvarchar(4000)set @name='david fan'-- TODO: 在此处设置参数值,EXECUTE [TestProject].[dbo].[TestS

执行存储过程

DECLARE @name nvarchar(4000)
DECLARE @outstr nvarchar(4000)
set @name='david fan'
-- TODO: 在此处设置参数值。
EXECUTE [TestProject].[dbo].[TestStoredProcedure]
   @name
  ,@outstr OUTPUT
print @outstr

结果如下

SQLCLR(二)存储过程和自定义函数

输出参数返回值

SQLCLR(二)存储过程和自定义函数 

自定义函数

一,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;
        }
    }
}

Tags:SQLCLR 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接