Don't really know if there is a best way. It depends on volume and type of data. You only gave example of 3 rows with one character data. The only way I know is to use loops, either a cursor and loop for each char or the following for a set based solution.
Note, this solution will remove the text from the text fields in TABLE_A.
declare @CT int
set @CT = 1
while @CT > 0
begin
insert into TABLE_B select SUBSTRING(THE_TEXT,1,CHARINDEX(',',THE_TEXT)-1) from TABLE_A where CHARINDEX(',',THE_TEXT)>0
update TABLE_A set THE_TEXT = SUBSTRING(THE_TEXT,CHARINDEX(',',THE_TEXT)+1,DATALENGTH(THE_TEXT)-CHARINDEX(',',THE_TEXT)+1) where CHARINDEX(',',THE_TEXT)>0
select @CT = count(*) from TABLE_A where CHARINDEX(',',THE_TEXT)>0
end
insert into TABLE_B select THE_TEXT from TABLE_A where DATALENGTH(THE_TEXT)>0
select * from TABLE_B order by THE_VALUE
Far away is close at hand in the images of elsewhere.
Anon.