在SQL Server中调用dll分为两个步骤
1.创建一个dll文件(dll文件分成3种类型,讲其中一种)
2.把dll文件放进SQL Server的程序集中。然后定义一个Function,就可以通过该Function来引用dll中的函数。
1创建一个dll文件
1.1点击“文件”->“新建”->“项目”->类库,把命名空间改成TestDLL,添加如下代码
(框架必须改为.NET3.5及3.5以下,因为SQL Server 2008只是支持.NET 3.5及一下,.NET 4.0是2010年发布的,不支持也很正常,C#方法必须是静态方法,因为静态函数不用实例化类就可以调用)
创建dll程序(求和、小写字母转换成大写字母)
using System; using System.Collections.Generic; using System.Text; namespace TestDLL { public class Class1 { //求0到n的和当n小于0时返回0 //方法必须为静态方法,因为静态函数不用实例化类就可以调用 public static int Calc(int n) { int sum; sum = 0; if (n>=0) { for (int i = 0; i <= n; i++) { sum = sum + i; } return sum; } else { return 0; } } //将字符串转换成大写 public static string Todaxie(string s) { return s.ToUpper(); } } }
1.2右击“项目”,点击”生成“或者直接按F6
1.3右击“项目”,点击“在文件资源管理系统中打开文件夹”,点击bin->debug,然后就会看到一个TestDLL.dll文件。
2在SQL中引用dll文件
2.1允许SQL Server允许运行用户程序集
在SQL Server中运行如下代码:
EXEC sp_configure 'clr enabled' , '1'; --0代表不允许,1代表运行 RECONFIGURE;
其中TestDll是你在数据库中为这个程序集起的名字。
2.3创建一个Function,使用该dll文件
使用如下SQL语句
--转换成大写字母 create FUNCTION [dbo].[ToUpper](@InputString [nvarchar](500)) RETURNS [nvarchar](200) WITH EXECUTE AS CALLER AS EXTERNAL NAME [TestDLL].[TestDLL.Class1].[Todaxie] GO --求和函数 CREATE FUNCTION [dbo].[Calc](@n int) --该函数名字 RETURNS int --返回类型 WITH EXECUTE AS CALLER AS EXTERNAL NAME [TestDLL].[TestDLL.Class1].[Calc] --调用c#程序集 GO
注意一下的那几个单词。
TestDLL是指你程序集中dll的名称。
TestDLL是指dll文件中那个类的命名空间
Class1是指dll文件中那个类的类名
Todaxie是指dll文件中那个被调用的静态方法
最后,便可以这样来调用该函数
print dbo.ToUpper('abc') --输出的结果为ABC SELECT dbo.Calc(3) --输出的结果为6