SQL Server 2005 中, 直接叫用.NET組件是個很特別的功能; 它的使用時點在於當 SQL Program 無法快速有效率的處理我們想做的事, 而且.NET code可以做的比 SQL Program 好時, 我們可以在 SQL Program 中直接叫用 .NET組件中的類別方法, 這些Method必須是static, 這些Method可以被視為Function, Stored Procedure的方式來使用.

以下是一連串的步驟, 說明建立的過程.

1. 標示指定Method

在想要成為CLR Function/Stored Procedure的Static Method上設定Attribute.

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4:  
   5: using Microsoft.SqlServer.Server;
   6:  
   7: namespace HowardCLRInSQLSample
   8: {
   9:     public class HelloCLR
  10:     {
  11:         [SqlFunctionAttribute(Name = "FN_Hello")]
  12:         public static string FN_Hello()
  13:         {
  14:             return "Hello, CLR Function In SQL !!";
  15:         }
  16:  
  17:         [SqlProcedureAttribute(Name = "SP_Hello")]
  18:         public static void SP_Hello()
  19:         {
  20:             SqlContext.Pipe.Send("Hello, CLR Stored Procedure In SQL !!");
  21:         }
  22:     }
  23: }

2. SQL Server 環境建立

   1: -- 啟用SQL Server中的 CLR功能 (預設為關閉)
   2: -- 必須擁有 sysadmin 或 serveradmin 的權限才能啟用此功能
   3: sp_configure 'clr enabled', 1
   4: GO
   5: RECONFIGURE
   6: GO
   7:  
   8: -- 同時必須設定 指定db - Compatibility level -> 90 (即database為SQL Server 2005) 
   9: sp_dbcmptlevel OFD_POLARIS_CUR_EC, 90

3. 註冊組件, 建立CLR Function/Stored Procedure

   1: -- 登錄組件 HowardCLRInSQLSample.dll
   2: -- 任何登錄之後的任何變動(re-build) 皆需重登錄
   3: IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'HowardCLRInSQLSample')
   4: DROP ASSEMBLY HowardCLRInSQLSample;
   5: GO
   6:  
   7: CREATE ASSEMBLY HowardCLRInSQLSample
   8: FROM 'H:\00 IT\Database\SQL Server\SQL 2005\clr in sql server\HowardCLRInSQLSample\HowardCLRInSQLSample\bin\Debug\HowardCLRInSQLSample.dll'
   9: WITH PERMISSION_SET = SAFE;
  10: GO
  11:  
  12: -- 可以用assembly_files來檢視組件的路徑
  13: select * from sys.assembly_files
  14:  
  15: -- 建立clr function
  16: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_Hello]') and xtype in (N'FN', N'IF', N'TF', N'FS'))
  17:     drop function [dbo].[FN_Hello]
  18: GO
  19:  
  20: CREATE FUNCTION [dbo].[FN_Hello] ()
  21: Returns  nvarchar(100)
  22: EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].FN_Hello
  23:  
  24:  
  25: -- 建立clr sp
  26: IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = N'SP_Hello')
  27:     DROP PROCEDURE [dbo].[SP_Hello];
  28: GO
  29:  
  30: CREATE PROCEDURE [dbo].[SP_Hello]
  31: AS EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].SP_Hello
  32: GO

4.大功告成. 就如同使用一般function與stored procedure的方式.

   1: select [dbo].[FN_Hello]()
   2:  
   3: exec SP_Hello
http://hi.baidu.com/thesum/blog/item/1417f9f9c9f1b65f252df29e.html

建立 CLR Stored Procedure/Function 的小範例相关推荐

  1. SQLSERVER使用CLR Stored Procedure导出数据到Excel

    在实际应用中,我们经常需要导出数据到Excel文件,你可以使用DTS或SSIS来做.但有时,我们并不需要这么重量级的工具,直接用CLR SP实现就可以了. 假设你已经写好了导出Excel的C# cod ...

  2. SQL存储过程(Stored Procedure)

    SQL存储过程(Stored Procedure) 什么是存储过程? 存储过程(procedure)类似于C语言中的函数 用来执行管理任务或应用复杂的业务规则 存储过程可以带参数,也可以返回结果 存储 ...

  3. DNN安装报错-The stored procedure 'dbo.GetPortalAliasByPortalID' doesn't exist.如何解决

    因为出错代码比较长,就放在后面了. 出现"The stored procedure 'dbo.GetPortalAliasByPortalID' doesn't exist."报错 ...

  4. Stored Procedure 里的 WITH RECOMPILE 到底是干麻的?

    Stored Procedure 里的 WITH RECOMPILE 到底是干麻的? 原文:Stored Procedure 里的 WITH RECOMPILE 到底是干麻的? 在 SQL Serve ...

  5. java sharepoint 2010,安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法...

    要使用sharepoint开发一个项目,下载sharepoint server 2010并安装,我的开发环境是win 7(x64),因此需要进行特定的设置才可以安装,可以参考 参考上述文章进行安装都很 ...

  6. [BTS] Could not find stored procedure 'mp_sap_check_tid'

    日志名称:          Application 来源:            BizTalk Adapter v2.0 for mySAP Business Suite 日期:          ...

  7. js function后面小括号

    js function后面小括号 function后面小括号有小括号为立即调用函数 立即调用函数 function后面小括号有小括号为立即调用函数 立即调用函数 IIFE (Immediately I ...

  8. 关于DBeaver stored procedure中print语句的内容看不见,smss可以的问题

    stored procedure语句如下 smss显示 DBeaver没有 修改成 select (@insert_sql); 可以看到打印结果了

  9. Dnn中常见的一个错误及可能原因:Could not find stored procedure 'dbo.GetPortals'

    Could not find stored procedure 'dbo.GetPortals' 错误的 {objectqualifier}. 数据库的版本保存在dnn.config 中,assemb ...

  10. JDBC连接执行mysql存储过程报权限错误:User does not have access to metadata required to determine stored procedure

    项目场景: mysql创建数据加工流程,使用dophinscheduler定时调度运行项目. 问题描述 运行报错:java.sql.SQLException:User does not have ac ...

最新文章

  1. Linux下的编译(环境是centos6.8 gcc 4.4.7)
  2. SharePoint中Tab方式进行内容展现的WebPart
  3. 多分类可以分成多个独立的模型来训练
  4. c语言用double最大,C语言里double类型的最大值和最小值是多少?
  5. Redis 远程字典服务及shell全部命令汇总【点击可查看高清原图】(附 xmind思维导图原文件 百度网盘)
  6. 玩转Linux必备知识(二)
  7. U Sparkle 开发者计划招募中!
  8. 求关系模式r的所有候选码_2_1关系数据库的基本概念
  9. Frida Android hook
  10. 解决Glyphicons 字体不显示问题的两种解决方案
  11. android横向铺满屏幕,解决安卓自定义Dialog不能水平铺满屏幕
  12. 三种编码器协议(Endat\BISS\SSI)
  13. matlab怎么根据公式建立三维模型,紧急!求助!用matlab建立三维copula模型,正用极大似然估计方法求copula函数参数...
  14. php小程序秒抢高并发,微信小程序的10个请求并发限制的优化消息!!!
  15. 解决System进程占用80端口的问题
  16. 谷歌浏览器任务栏图标变白解决办法
  17. 姓名投票c语言未给定候选人,C语言上机
  18. Django分布式路由
  19. 隐藏高德地图左下角LOGO
  20. (转)[IOS]正在通过app store进行鉴定解决方案

热门文章

  1. .NET中的加密类(对称加密)
  2. 中兴V889D刷机变砖不用怕 V889D救砖教程发布【转载】
  3. 数据呈现—ListView x Adapter
  4. Baidu 人脸识别FireFly 与PC连接调试
  5. Java期末设计(十三周)
  6. 查询sql语句所花时间
  7. CSS让图片垂直居中的几种技巧
  8. Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)
  9. 6.性能测试监控工具
  10. MySQL技术内幕 InnoDB存储引擎【二】后台线程