大家都说我的描述很不好,这次我干脆直接用代码+注释来表示了。
using System.Collections;
using System.Text;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace StringSplit
{
public class Stringhelp
{
//这个特性定义了一个sql表值函数,此函数返回的表的定义为:String nvarchar(200)
//并且指定了填充这个表的行的方法是FillRow 方法
//注意这个方法返回的一定是一个IEnumerable类型的,并且为公开,静态,这个方法的入参就是sql函数的入参
[SqlFunction(TableDefinition = " String nvarchar(200)", FillRowMethodName = "FillRow")]
public static IEnumerable GetStrings(string x,char y)
{
//返回一个string 数组,这个数组符合IEnumerable接口,当然你也可以返回hashtable等类型。
return x.Split(y);
}
//填充返回表的行的方法,这个方法有一定的规定:
//一定是空返回的void类型,并且入参的第一个必须为object,其后面的参数都必须为out类型
//参数的类型,个数和顺序由返回表的列结构决定!(在TableDefinition = " String nvarchar(200)"中定义的表结构)
public static void FillRow(object row,out string splitedstring)
{
//这个object 其实就是GetStrings(string x,char y)函数返回的迭代,这样你直接赋值给那个列就可以了。
splitedstring = (String)row;
}
}
}
这样,编译此类库,实用如下sql 语句将dll创建到数据库中:
create assembly ArrayAssembly
from 'd:\stringSplit.dll'
WITH permission_set = Safe;
注意更改dll的对应地址。
然后如果是第一次做clr集成应用,需要把clr功能开启,使用如下语句开启:
EXEC sp_configure 'clr enabled', '1';
GO
RECONFIGURE;
GO
然后开启了的朋友可以创建这个表值函数了,使用如下语句:
create function splitstring(@x nvarchar (200),@y nchar(1))
RETURNS TABLE(StringElement nvarchar(200))
AS EXTERNAL NAME ArrayAssembly.[StringSplit.Stringhelp].GetStrings;
GO
这个语句要注意命名规则,规则我在以前的文章中讲过了。
然后可以测试这个表值函数了。
select * from splitstring('xiangxiang,zangjifei',',')
返回结果:
这样,就可以很容易的使用了。
比如:
select * from dbo.T_test as t where t.id in (select * from splitstring('12,23',','))
相关推荐
之后,可以创建一个用户定义函数,将CLR程序集中的方法映射到SQL Server中: ```sql CREATE FUNCTION dbo.SegmentSort(@input NVARCHAR(MAX), @delimiter CHAR(1)) RETURNS NVARCHAR(MAX) AS EXTERNAL NAME ...
在本例中,创建了一个名为`CLR_Split`的用户定义函数,利用.NET Framework的内建功能`String.Split()`,这比在SQL Server内部进行字符串处理更有效率。`SqlArray`方法接收一个字符串和分隔符,然后返回一个字符串...
CLR(Common Language Runtime)集成是 SQL Server 提供的一项功能,允许开发者使用 .NET Framework 编写存储过程、函数、触发器等数据库对象。这种方式可以提供更强大的编程能力,并利用 .NET Framework 的类库。 ...
- **创建一个类和其方法**:类包含属性和方法。 - **类成员**:包括字段、属性、方法等。 - **构造函数和析构函数**:用于初始化和清理对象资源。 **3.3 对象的生命周期** - **类成员的访问**:可以通过访问修饰符...
第一部分 Visual C++ 2010开发与新特性 第1章 Visual C++ 2010开发环境简介 1 1.1 Visual C++ 2010简介 1 1.2 Visual C++ 2010下载安装指南 1 1.3 Visual C++ 2010主要特点与新特性 3 1.4 Visual C++ 2010开发环境...
使用一个属性字段作为超链 在内容表中右击包含一个超链接字段的图层,然后点击properties ,单击Display选项卡。选中Supprt Hyper3. Hyperlinks using field选项,单击下拉箭头并点击一个字段。 单击Document or URL...
7.创建一个int型变量x值为2,然后创建double型变量z,把x的值赋给z,输出z。 使用C#语言创建int型变量x,值为2,然后创建double型变量z,把x的值赋给z,输出结果。 8.C#中的注释有哪三种,分别解释下? C#中的...