create table curtest (djbh varchar (20), primary 关键,sales varchar (20)) 去 insert curt select “A1”、“01、02、03”, union all ,,,,,,,,,,,创建表并插入记录 select “A2”、“01、02”, union 所有 select A3, ' 02、03, union 所有 select ‘A4’,‘02、03、04’,, 去 declare cur_test  cursor for  select *,得到curtest ,,,——声明游标 declare @djbh  varchar(20),,,,,,,,,,,,,,,,,,,,,,,,,,,,,定义变量单据编的号 declare @sales  varchar(20),,,,,,,,,,,,,,,,,,,,,,,,,,,,,定义变量销售 @len  declare @star  int, int, @dhwz int ,,,,,,,,,,,,,,,,,定义变量开始,长度,逗号位置 open cur_test ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,打开游标 fetch next 得到cur_test into  @djbh, @sales ,,,,,,,,,,,,获取第一条记录 而(@@FETCH_STATUS=0),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,根据返回状态确认执行结果0代表成功 开始 set @star=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,对开始位置赋值1 set @dhwz=CHARINDEX (', ', @sales @star),,,,,,,,,,,,,,,,,获取第一个逗号位置 set @len=LEN (@sales),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,获取字段长度 而(@star<=@LEN),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,循环条件,开始位置小于字段长度 begin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, select @djbh substring (@sales、@star @dhwz -@star),,,,,,,,,获取逗号前字符, set @star=@dhwz + 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,每次循环,将上次逗号位置+ 1作为下次开始位置 set @dhwz=CHARINDEX (', ', @sales @star),,,,,,,,,,,,,,,,,,,,以上次逗号位置+ 1作为本次开始位置,检索下一个逗号位置 如果(@dhwz=0),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,判断,当检索不到逗号(即返回值为0,并且已到达最后一个逗号) 开始 select @djbh SUBSTRING (@sales、@star (@len -@star) + 1),,,,,,最后一个逗号后字符,以上一次逗号位置+ 1开始,长度为字段总长度减开始位置+ 1 break ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,跳出循环,,,, 最终获得,,, 结束 fetch next 得到cur_test into  @djbh, @sales ,,,,,,,,,,,,,,读取下一条记录,并重新开始执行循环(拆分并检索逗号分割字符) 结束 close cur_test