--
--9.4.1节示例
--
//系统创建的用户定义函数
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
//创建用户定义函数所在的类,该类的类名是UserDefinedFunctions
public partial class UserDefinedFunctions
{
//通过Attribute来标明静态方法HtmlFilter可以作为SQL中的用户定义函数
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString HtmlFilter()//函数名
{
//在此输入你的代码
return new SqlString("Hello"); //返回结果
}
};
//修改后的HtmlFilter()函数
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
//创建用户定义函数所在的类,该类的类名是UserDefinedFunctions
public partial class UserDefinedFunctions
{
//通过Attribute来标明静态方法HtmlFilter可以作为SQL中的用户定义函数
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString HtmlFilter(SqlString html) //传送字符串参数html
{
if (html.IsNull) //如果传入字符串为空,则返回空
{
return null;
}
//返回经过处理的字符串
return new SqlString(Regex.Replace(html.Value, "<[^>]+>", ""));
}
}
--
--9.4.2节示例
--
--创建CLR标量值函数
CREATE FUNCTION [dbo].[HtmlFilter] –SQL中的函数名
(
@html [nvarchar](1000) --CLR标量值函数的参数
)
RETURNS [nvarchar](200) --CLR标量值函数的返回值
AS --以下定义函数对应的程序集中的位置
EXTERNAL NAME [TestSQLAssembly].[UserDefinedFunctions].[HtmlFilter]
--使用CLR标量值函数
select dbo.HtmlFilter('<a href="about.aspx">About Us</a>') --调用CLR标量值函数
--返回无HTML标签的结果:
About Us
--
--9.4.3节示例
--
//StringSplit()函数
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
//创建用户定义函数所在的类,该类的类名是UserDefinedFunctions
public partial class UserDefinedFunctions
{
//使用Attribute指定StringSplit函数是CLR表值函数
//FillSplitTable是将.NET中的对象转换为表列的函数名
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName="FillSplitTable")]
public static IEnumerable StringSplit(SqlString str,SqlString split)//定义函数
{
if (str.IsNull || split.IsNull) //如果任何一个参数为空,则返回空表
{
return "".ToCharArray();
}
return str.Value.Split(split.Value.ToCharArray());//两个参数都不为空,返回字符串分割结果
}
//这里定义了将.NET中的对象转换为表列的静态方法
public static void FillSplitTable(object obj, ref SqlString F1)//F1就是返回表的列名
{
string s = obj.ToString();//传入的对象
F1 =new SqlString(s); //将字符串s作为F1列输出
}
}
--
--9.4.4节示例
--
--更新程序集
ALTER ASSEMBLY [TestSQLAssembly] --更新程序集
FROM 'D:\Lib\SqlServerProject1.dll'
WITH PERMISSION_SET = SAFE
--创建StringSplit表值函数
CREATE FUNCTION StringSplit --创建CLR表值函数
(
@str nvarchar(4000),
@split nvarchar(10)
)
RETURNS TABLE([F1] nvarchar(4000)) 返回一个表,表中只有一个列F1
AS --以下定义函数对应的CLR中的位置
EXTERNAL NAME [TestSQLAssembly].[UserDefinedFunctions].StringSplit
--使用CLR表值函数
SELECT *
FROM dbo.StringSplit('a,bc,def,g',',') --使用逗号分割字符串