大家都知道在C#把一个字符串以指定的字符分成一个数组,实用split方法很容易办到,但是在t-sql 中却。。。。 在我的项目中,有如下应用:批量读取一批数据,然后处理每行的数据,处理完后,把处理成功的id和处理失败的id返回给数据库,这就涉及到一个批量更新的一个问题,你是把id一个一个写成批处理更新回数据库还是每个id就打开一次数据库,更新呢?其实,只要t-sql支持数组就能够做到。好了,我们现在就让t-sql支持数组!

大家都说我的描述很不好,这次我干脆直接用代码+注释来表示了。
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数using System;
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
using System.Collections;
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
using System.Text;
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
using System.Data.SqlTypes;
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
using Microsoft.SqlServer.Server;
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
namespace StringSplit


这样,编译此类库,实用如下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',',')

返回结果:
sql server clr 集成系列之四 创建一个clr的表值函数---实用的Split函数
这样,就可以很容易的使用了。
比如:
select * from dbo.T_test as t where t.id in  (select * from splitstring('12,23',','))

相关文章:

  • 2022-12-23
  • 2021-05-08
  • 2021-11-03
  • 2021-07-09
  • 2022-12-23
猜你喜欢
  • 2021-07-04
  • 2021-05-27
  • 2021-11-13
  • 2021-07-08
  • 2021-10-23
  • 2021-09-11
相关资源
相似解决方案