KimhillZhang  

今天有一个需求需要进行以“;”和“,”为分割符把数据分隔开,然后再插入数据库里,用存储过程实现;如字符串为: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'

posted on 2010-05-25 14:31  KimhillZhang  阅读(1785)  评论(0编辑  收藏  举报