建立 CLR Stored Procedure/Function 的小範例
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 的小範例相关推荐
- SQLSERVER使用CLR Stored Procedure导出数据到Excel
在实际应用中,我们经常需要导出数据到Excel文件,你可以使用DTS或SSIS来做.但有时,我们并不需要这么重量级的工具,直接用CLR SP实现就可以了. 假设你已经写好了导出Excel的C# cod ...
- SQL存储过程(Stored Procedure)
SQL存储过程(Stored Procedure) 什么是存储过程? 存储过程(procedure)类似于C语言中的函数 用来执行管理任务或应用复杂的业务规则 存储过程可以带参数,也可以返回结果 存储 ...
- DNN安装报错-The stored procedure 'dbo.GetPortalAliasByPortalID' doesn't exist.如何解决
因为出错代码比较长,就放在后面了. 出现"The stored procedure 'dbo.GetPortalAliasByPortalID' doesn't exist."报错 ...
- Stored Procedure 里的 WITH RECOMPILE 到底是干麻的?
Stored Procedure 里的 WITH RECOMPILE 到底是干麻的? 原文:Stored Procedure 里的 WITH RECOMPILE 到底是干麻的? 在 SQL Serve ...
- java sharepoint 2010,安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法...
要使用sharepoint开发一个项目,下载sharepoint server 2010并安装,我的开发环境是win 7(x64),因此需要进行特定的设置才可以安装,可以参考 参考上述文章进行安装都很 ...
- [BTS] Could not find stored procedure 'mp_sap_check_tid'
日志名称: Application 来源: BizTalk Adapter v2.0 for mySAP Business Suite 日期: ...
- js function后面小括号
js function后面小括号 function后面小括号有小括号为立即调用函数 立即调用函数 function后面小括号有小括号为立即调用函数 立即调用函数 IIFE (Immediately I ...
- 关于DBeaver stored procedure中print语句的内容看不见,smss可以的问题
stored procedure语句如下 smss显示 DBeaver没有 修改成 select (@insert_sql); 可以看到打印结果了
- Dnn中常见的一个错误及可能原因:Could not find stored procedure 'dbo.GetPortals'
Could not find stored procedure 'dbo.GetPortals' 错误的 {objectqualifier}. 数据库的版本保存在dnn.config 中,assemb ...
- JDBC连接执行mysql存储过程报权限错误:User does not have access to metadata required to determine stored procedure
项目场景: mysql创建数据加工流程,使用dophinscheduler定时调度运行项目. 问题描述 运行报错:java.sql.SQLException:User does not have ac ...
最新文章
- Linux下的编译(环境是centos6.8 gcc 4.4.7)
- SharePoint中Tab方式进行内容展现的WebPart
- 多分类可以分成多个独立的模型来训练
- c语言用double最大,C语言里double类型的最大值和最小值是多少?
- Redis 远程字典服务及shell全部命令汇总【点击可查看高清原图】(附 xmind思维导图原文件 百度网盘)
- 玩转Linux必备知识(二)
- U Sparkle 开发者计划招募中!
- 求关系模式r的所有候选码_2_1关系数据库的基本概念
- Frida Android hook
- 解决Glyphicons 字体不显示问题的两种解决方案
- android横向铺满屏幕,解决安卓自定义Dialog不能水平铺满屏幕
- 三种编码器协议(Endat\BISS\SSI)
- matlab怎么根据公式建立三维模型,紧急!求助!用matlab建立三维copula模型,正用极大似然估计方法求copula函数参数...
- php小程序秒抢高并发,微信小程序的10个请求并发限制的优化消息!!!
- 解决System进程占用80端口的问题
- 谷歌浏览器任务栏图标变白解决办法
- 姓名投票c语言未给定候选人,C语言上机
- Django分布式路由
- 隐藏高德地图左下角LOGO
- (转)[IOS]正在通过app store进行鉴定解决方案