Try this code:
delete from tmp_testparse
insert into tmp_testparse(ts_prospect)
values('5-W58-DJP-P')
insert into tmp_testparse(ts_prospect)
values('5-W58-DNZ')
insert into tmp_testparse(ts_prospect)
values('5-W44')
insert into tmp_testparse(ts_prospect)
values('5-W58-DQQ-P')
insert into tmp_testparse(ts_prospect)
values('5-O44-DJP-P')
select * from tmp_testparse
set nocount on
set transaction isolation level read uncommitted
--variable declaration
declare @l_vcucode varchar(12),
@l_ts_route varchar(30),
@l_vSQLString varchar(2048),
@l_vtemptable varchar(32),
@l_vshtracknolist varchar(2048),
@l_vshtracknolistmarker varchar(2048),
@l_ts_ID varchar(128),
@l_vshtrackno varchar(128),
@l_tsuser varchar(10),
@l_icounter int
select *, 0 as processed into #dec_tracknums from tmp_testparse
while (select count(*) from #dec_tracknums where processed = 0 ) > 0
BEGIN
--set the item listfor the current work record
select top 1 @l_vshtracknolist = ts_prospect from #dec_tracknums where processed = 0
--set the marker (in order to set the work record as processed)
set @l_vshtracknolistmarker = @l_vshtracknolist
--print @l_vshtracknolist
--loop through items and create an individual result record for each
set @l_icounter = 0
while len(rtrim(@l_vshtracknolist)) > 0
begin
set @l_icounter = @l_icounter + 1
--get the left-most tracking number
if charindex('-',@l_vshtracknolist) > 0
set @l_vshtrackno=substring(@l_vshtracknolist,1,charindex('-',@l_vshtracknolist)-1)
else
set @l_vshtrackno = @L_vshtracknolist
print 'Item '+cast(@L_icounter as char(1)) +': '+@l_vshtrackno
if @l_icounter = 1
update tmp_testparse set ts_route = @l_vshtrackno
where ts_prospect = @l_vshtracknolistmarker
if @l_icounter = 2
update tmp_testparse set ts_ID = @l_vshtrackno
where ts_prospect = @l_vshtracknolistmarker
if @l_icounter = 3
update tmp_testparse set ts_user = @l_vshtrackno
where ts_prospect = @l_vshtracknolistmarker
if @l_icounter = 4
update tmp_testparse set ts_prospect = @l_vshtrackno
where ts_prospect = @l_vshtracknolistmarker
--whack the left-most item from the working list
if charindex('-',@l_vshtracknolist) > 0
set @l_vshtracknolist = substring(@l_vshtracknolist,charindex('-',@l_vshtracknolist)+1,len(@l_vshtracknolist))
else
set @l_vshtracknolist = ''
print 'vshtracknolist now '+@l_vshtracknolist
--next item
end
-- set the working record as processed
update #dec_tracknums set processed = 1 where ts_prospect = @l_vshtracknolistmarker
--next record
END
select * from tmp_testparse
drop table #dec_tracknums
and adjust for your table name, etc.
HTH,
Phil Hegedusich
Senior Web Developer
IIMAK
-----------
Boy howdy, my Liberal Studies degree really prepared me for this....