1.创建面目:

2. 添加函数代码:

  1. using System;
  2. using System.Data.Sql;
  3. using Microsoft.SqlServer.Server;
  4. using System.Collections;
  5. using System.Data.SqlTypes;
  6. using System.Diagnostics;
  7.  
  8. public class TabularEventLog
  9. {
  10. [SqlFunction(TableDefinition =
  11. @"logTime datetime
  12. ,Message nvarchar(4000)
  13. ,Category nvarchar(4000)
  14. ,InstanceId bigint",
  15. Name = "ReadEventLog", FillRowMethodName = "FillRow")]
  16. public static IEnumerable InitMethod(String logname)
  17. {
  18. return new EventLog(logname, Environment.MachineName).Entries;
  19. }
  20.  
  21. public static void FillRow(Object obj, out SqlDateTime timeWritten,
  22. out SqlChars message, out SqlChars category,
  23. out long instanceId)
  24. {
  25. EventLogEntry eventLogEntry = (EventLogEntry)obj;
  26. timeWritten = new SqlDateTime(eventLogEntry.TimeWritten);
  27. message = new SqlChars(eventLogEntry.Message);
  28. category = new SqlChars(eventLogEntry.Category);
  29. instanceId = eventLogEntry.InstanceId;
  30. }
  31. }

3. 脚本:

  1. USE MASTER
  2. GO
  3. sp_configure 'show advanced options',1;
  4. GO
  5. RECONFIGURE;
  6. GO
  7. sp_configure 'clr enabled', 1;
  8. GO
  9. RECONFIGURE;
  10. GO
  11. --表值函数放在 db_study 库上
  12. USE db_study
  13. GO
  14. --删除函数
  15. IF OBJECT_ID('[dbo].[ReadEventLog]') IS NOT NULL
  16. DROP FUNCTION [dbo].ReadEventLog
  17. GO
  18. --删除程序集
  19. IF EXISTS(SELECT * FROM SYS.ASSEMBLIES WHERE NAME='tvfEventLog')
  20. DROP ASSEMBLY tvfEventLog
  21. GO
  22. --创建程序集, 设置为实际路径, 注意应设置为: UNSAFE
  23. CREATE ASSEMBLY tvfEventLog FROM'D:\Project\StudySimple\SqlServerProject1\bin\Debug\SqlServerProject1.dll' WITH PERMISSION_SET = UNSAFE
  24. GO
  25. --创建表值函数
  26. CREATE FUNCTION dbo.ReadEventLog(@logname nvarchar(100))
  27. RETURNS TABLE (
  28. logTime DATETIME
  29. ,Message nvarchar(4000)
  30. ,Category nvarchar(4000)
  31. ,InstanceId BIGINT
  32. )
  33. AS
  34. EXTERNAL NAME tvfEventLog.TabularEventLog.InitMethod
  35. GO
  36. --查询
  37. SELECT TOP 10 T.logTime, T.Message, T.InstanceId
  38. FROM dbo.ReadEventLog(N'Security') as T
  39. ORDER BY logTime DESC

  

  

Sql CLR创建一个简单的表值函数的更多相关文章

  1. SQL点滴3—一个简单的字符串分割函数

    原文:SQL点滴3-一个简单的字符串分割函数 偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号“,”  遇到其他情况只要稍加修改就好了 CREATE FUN ...

  2. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  3. 如何创建一个简单的C++同步锁框架(译)

    翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...

  4. 使用 CodeIgniter 创建一个简单的 Web 站点

    原文:使用 CodeIgniter 创建一个简单的 Web 站点 参考源自: http://www.ibm.com/developerworks/cn/web/wa-codeigniter/index ...

  5. Python框架学习之用Flask创建一个简单项目

    在前面一篇讲了如何创建一个虚拟环境,今天这一篇就来说说如何创建一个简单的Flask项目.关于Flask的具体介绍就不详细叙述了,我们只要知道它非常简洁.灵活和扩展性强就够了.它不像Django那样集成 ...

  6. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  7. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  8. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  9. django创建一个简单的web站点

    一.新建project 使用Pycharm,File->New Project…,选择Django,给project命名 (project不能用test命名)   新建的project目录如下: ...

随机推荐

  1. BZOJ 1477: 青蛙的约会

    二次联通门 : BZOJ 1477: 青蛙的约会 /* BZOJ 1477: 青蛙的约会 扩展欧几里得 列出方程, 判断一下 */ #include <iostream> #include ...

  2. 特征缩放(Feature Scaling)

    特征缩放的几种方法: (1)最大最小值归一化(min-max normalization):将数值范围缩放到 [0, 1] 区间里 (2)均值归一化(mean normalization):将数值范围 ...

  3. c博客作业01——顺序 分支结构

    本章学习总结 1.1 学习内容总结 ·学习switch分支的使用,switch后加括号(),括号内填一个变量或字符 如 switch (a) { case 2: case 3: default: } ...

  4. hive 整合ranger

    一.安装hive插件 1.解压安装 #  tar zxvf ranger-2.0.0-SNAPSHOT-hive-plugin.tar.gz -C /data1/hadoop/ 2.修改install ...

  5. 将对象转化为数组,并且适用select下拉

    当你做element-ui的select下拉的时候数据是从后台请求,但是怎么才能将obj转成数组呢.并且后台返回的key和value中的key是要传的参数 var obj = { name: 'gab ...

  6. ICEM-空心圆柱体

    原视频下载地址:https://pan.baidu.com/s/1boG49MB 密码: 4iq6

  7. 2019_软工实践_Beta(1/5)

    队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述  检测网站不合理的地方,给组员定下相应时间进度的安排 展示GitHub当 ...

  8. Ubuntu18.04 Server安装Nginx+Git服务和独立的svn服务

    安装Nginx+Git 需要安装的包有 nginx, fcgiwrap, git. 其中git在Ubuntu18.04 Server安装时已经默认安装了. 需要安装的是前两个 而fcgiwrap是在 ...

  9. Web.Config配置文件中customErrors元素的使用方法

    在Web.Config配置文件中,customErrors元素提供有关ASP.NET 应用程序自定义错误消息的信息. 先看一下配置结构的示例: <configuration>   < ...

  10. excel打开csv 出现乱码

    现在做舆情分析的相关项目,在数据处理的时候,发现了一个问题.将数据写入到csv文件,用excel打开(默认)就会出现乱码,如果将数据写入到.xlsx文件就不会出现乱码,因为csv是通用格式,所以我猜想 ...