今天有一个需求需要进行以“;”和“,”为分割符把数据分隔开,然后再插入数据库里,用存储过程实现;如字符串为:kimhillzhang,20;jinshanzhang,25,现在要以kimhillzhang 20 为一条数据插入数据库,以jinshanzhang 25为一条数据插入数据库
name age
kimhillzhang 20
jinshanzhang 25
存储过程代码如下:
/*
张金山 2010-5-25
*/
create procedure sp_SplitConent
@string nvarchar(1000), -- 要分隔的字符串
@splitchar nvarchar(10) = ';', -- 以“;”为分隔字符
@splitC nvarchar(10)=',', --以“,”为分隔符
@tablename nvarchar(50), -- 存入的表名称
@fieldname nvarchar(50)-- 存入的字段名称
as -- 将字符串分隔开放进表中
declare @l int -- 第一个分隔";"字符的位置
declare @s int -- 第二个分隔";"字符的位置
declare @first int --第一个分隔","字符的位置
declare @last int --第一个分隔","字符的位置
set @l = 0
set @s = charindex(@splitchar, @string, @l)
while @l <= len(@string) --判断整串的字符长度
begin
declare @id nvarchar(50) --用来存储以“;”分割出来的数据
declare @value nvarchar(MAX) --用来存储以“,”分割出来的数据,注意这里得定义的足够大,以勉值被截去
if @s = 0 set @s = len(@string) + 1 -- 如果到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
set @id = substring(@string, @l, @s - @l) -- 取值
--实现分割“,”
set @first = 0
set @last=charindex(@splitC,@id,@first)
set @value=''
while @first <= len(@id)
begin
if @last = 0 set @last=len(@id) +1
if @value = ''
set @value = ''''+substring(@id,@first,@last-@first)+''','
else
set @value = @value + ''''+substring(@id,@first,@last-@first)+''','
set @first = @last + 1
set @last = charindex(@splitC, @id, @first)
end
set @value = substring(@value,1,len(@value)-1) --去掉最后一个","
declare @sql nvarchar(1000)
set @sql = 'insert into ' + @tablename + ' ( '+ @fieldname +' ) values('+ @value +')'
exec sp_executesql @sql
set @l = @s + 1
set @s = charindex(@splitchar, @string, @l)
end
调用 :exec sp_SplitConent 'kimhillzhang,20;jinshanzhang,25',';',',','T_User','username,userage'