有时我们拆分出来还是需要很长的字符串有可能超过(N)VarChar的长度,当然为了兼容SQL Server2000不能用max,所以我们拆出的字符串还是要用(N)Text来表示,需要注意的是在局部变量中不能定义(N)Text的类型,不过我们可以把substring出来的字符串直接加入到表变量中,而不要付值后在Insert。
2.当我们传入的(N)VarChar时,我们可以用LEN来计算长度,值得注意的是NVarChar的最大长度是4000,而VarChar的最大长度是8000。下面我们来看一下代码,和上面的代码基本没什么差别。
-- =============================================
-- Author: <myxbing>
-- Create date: <2007/8/18>
-- Description: <拆分字符串函数>
-- =============================================
Create Function [dbo].[ufn_Split]
(
@content varchar(8000),
@seperator varchar(20)
)
RETURNS @temp table
(
--Id int identity(1,1),
Value varchar(8000)
)
BEGIN
declare @CurrIndex int, @NextIndex int
select @CurrIndex = 1
select @NextIndex = 1
select @NextIndex=charindex(@seperator, @content)
while (@NextIndex > 0)
begin
if (@NextIndex >= @CurrIndex+1)
begin
insert into @temp (Value) values (substring(@content, @CurrIndex, @NextIndex-@CurrIndex))
end
select @CurrIndex = @NextIndex + 1
select @NextIndex=charindex(@seperator, @content, @CurrIndex)
end
if @CurrIndex <= datalength(@content)
insert into @temp (Value) values (substring(@content, @CurrIndex, datalength(@content)-@CurrIndex+1))
return
END
-- Author: <myxbing>
-- Create date: <2007/8/18>
-- Description: <拆分字符串函数>
-- =============================================
Create Function [dbo].[ufn_Split]
(
@content varchar(8000),
@seperator varchar(20)
)
RETURNS @temp table
(
--Id int identity(1,1),
Value varchar(8000)
)
BEGIN
declare @CurrIndex int, @NextIndex int
select @CurrIndex = 1
select @NextIndex = 1
select @NextIndex=charindex(@seperator, @content)
while (@NextIndex > 0)
begin
if (@NextIndex >= @CurrIndex+1)
begin
insert into @temp (Value) values (substring(@content, @CurrIndex, @NextIndex-@CurrIndex))
end
select @CurrIndex = @NextIndex + 1
select @NextIndex=charindex(@seperator, @content, @CurrIndex)
end
if @CurrIndex <= datalength(@content)
insert into @temp (Value) values (substring(@content, @CurrIndex, datalength(@content)-@CurrIndex+1))
return
END
3.拆分字符串,得到int类型的数据,这个比较简单,代码和上面的差不多这里就不给出了,可以根据上面的代码自己改写。
由于数据库中没有数组,所以只能用表变量返回,所以当你定义这些函数时要定义表值函数。OK有了这些函数我们就可以很好的利用他们来为我们的更有效的批量操作。当然由于变量都是考虑到溢出而设置的,肯能这样会给性能上带来一定的影响,但是编译后可能也可以给我们带来不少的效果,请大家慎用之。