快捷搜索:

Sql Server数据库中自定义拆分字符串函数Split() -

常常我们要用到批量操作时都邑用到字符串的拆分,愁闷的是SQL Server中却没有自带Split函数,以是我们只能自己着手来办理一下。为了削减和数据库的通讯次数,我们都邑使用这种措施来实现批量操作。当然无意偶尔我们会借助Execute这个措施来实现,使用这个措施有一个不好的地便利是她只熟识以","瓜分的字符串,在传IDs批量操作的时刻照样可以达到目的,然则常常我们要用到更繁杂的操作时我们就必要自己着手来完成了......

1.当我们必要传入很长的字符串是我们可以借助NText和Text类型,他们的差别是一个是支持Unicode,一个是支持ANSI字符集的。必要留意的是当我们要谋略字符串长度时我们必要用到DATALENGTH()而不是LEN(),在NText类型中一个字符占两个字节,以是在谋略字符时别忘了除以2,下面我们先看下例子就能够阐明统统了。

--=============================================

--Author:

-- Createdate:

--Description:

--=============================================

CREATE FUNCTION[dbo].[Split]

(

@SplitStringtext, -- 假如要传入NText类型,下面必要响应的改动,注释行径NText下同

@Separatorvarchar(2)= ','-- NVarChar(2) = N','

)

RETURNS@SplitStringsTableTABLE

(

[id]intidentity(1,1),

[value]varchar(8000) -- NVarChar(4000)

)

AS

BEGIN

DECLARE@CurrentIndexint;

DECLARE@NextIndexint;

DECLARE@ReturnTextvarchar(8000);-- NVarChar(4000)

SELECT@CurrentIndex=1;

WHILE(@CurrentIndex

无意偶尔我们拆分出来照样必要很长的字符串有可能跨越(N)VarChar的长度,当然为了兼容SQL Server2000不能用max,以是我们拆出的字符串照样要用(N)Text来表示,必要留意的是在局部变量中不能定义(N)Text的类型,不过我们可以把substring出来的字符串直接加入到表变量中,而不要付值后在Insert。

2.当我们传入的(N)VarChar时,我们可以用LEN来谋略长度,值得留意的是NVarChar的最大年夜长度是4000,而VarChar的最大年夜长度是8000。下面我们来看一下代码,和上面的代码基础没什么区别。

--=============================================

--Author:

--Createdate:

-- Description:

--=============================================

CREATE FUNCTION[dbo].[Split]

(

@SplitString varchar(8000),-- nvarchar(4000)

@Separatorvarchar(2)=','

)

RETURNS@SplitStringsTableTABLE

(

[id]intidentity(1,1),

[value]varchar(8000)-- nvarchar(4000)

)

AS

BEGIN

DECLARE@CurrentIndexint;

DECLARE@NextIndexint;

DECLARE@ReturnTextvarchar(8000);-- nvarchar(4000)

SELECT@CurrentIndex=1;

WHILE(@CurrentIndex

3.拆分字符串,获得int类型的数据,这个对照简单,代码和上面的差不多这里就不给出了,可以根据上面的代码自己改写。

因为数据库中没稀有组,以是只能用表变量返回,以是当你定义这些函数时要定义表值函数。OK有了这些函数我们就可以很好的使用他们来为我们的更有效的批量操作。当然因为变量都是斟酌到溢出而设置的,肯能这样会给机能上带来必然的影响,然则编译后可能也可以给我们带来不少的效果,请大年夜家慎用之。

您可能还会对下面的文章感兴趣: