哪位高手指教下 !!!!!!!!!!!!!!!!!!
我想实现这样一个功能      有一张表其中一个字段中的数据   有的有一条   有多条的是用“;”(分号)隔开的      现在想把这样有多条数据的查出来   然后分开   分别插入原表;   
 应该怎么办呢?   
 比如:         科目            学生 
                            语文            张三;李四   
 换成            科目            学生 
                         语文            张三; 
                         语文            李四
------解决方案--------------------    /* 
 	功能:实现split功能的函数 
 */   
 create function dbo.fn_split  
 	( 
 		@inputstr varchar(8000),  
 		@seprator varchar(10) 
 	) 
 returns @temp table (a varchar(200)) 
 as    
 begin 
 	declare @i int   
 	set @inputstr = rtrim(ltrim(@inputstr)) 
 	set @i = charindex(@seprator, @inputstr)   
 	while @i > = 1 
 	begin 
 		insert @temp values(left(@inputstr, @i - 1))   
 		set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i) 
 		set @i = charindex(@seprator, @inputstr) 
 	end   
 	if @inputstr  <>   '\ ' 
 		insert @temp values(@inputstr)   
 	return  
 end 
 go     
 create table #t(科目 varchar(100),学生 varchar(100))   
 insert into #t select  '语文 ', '张三;李四 '     
 --select * from #t     
 create table #tt(科目 varchar(100),学生 varchar(100))   
 declare cur cursor 
 read_only 
 for select 科目,学生 from #t   
 declare @km varchar(40),@xs varchar(100) 
 open cur   
 fetch next from cur into @km,@xs 
 while (@@fetch_status=0) 
 begin 
 	insert into #tt 
 	select @km,a 
 	from dbo.fn_split(@xs, '; ')     
 	fetch next from cur into @km,@xs 
 end   
 close cur 
 deallocate cur 
 go     
 select * from #tt     
 drop table #t 
 drop table #tt 
 go 
 drop function fn_split 
 go
------解决方案--------------------CREATE TABLE A(id INT,country VARCHAR(100)) 
 INSERT A 
 SELECT 1, '中国;日本;韩国 ' UNION ALL 
 SELECT 2, '美国;意大利;法国 ' UNION ALL 
 SELECT 3, '德国 ' 
 SELECT * FROM A   
 -- 建立一个辅助的临时表就可以了 
 SELECT TOP 8000 id = identity(int,1,1)  
 INTO # FROM syscolumns a, syscolumns b         
 SELECT  
     A.ID,  
     COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX( '; ', A.COUNTRY +  '; ', B.ID) - B.ID)  
 FROM A, # B 
 WHERE SUBSTRING( '; ' + a.COUNTRY, B.id, 1) =  '; '    
 ORDER BY 1,2 
 GO   
 DROP TABLE A,#   
 id          country          
 ----------- ---------------- 
 1           中国;日本;韩国 
 2           美国;意大利;法国 
 3           德国   
 (所影响的行数为 3 行)   
 ID          COUNTRY   
 ----------- --------- 
 1           韩国 
 1           日本 
 1           中国 
 2           法国 
 2           美国 
 2           意大利 
 3           德国   
 (所影响的行数为 7 行) 
------解决方案--------------------if object_id( 'pubs..A ') is not null 
    drop table A 
 go   
 create table A(科目 varchar(10),学生 varchar(10)) 
 insert into A(科目,学生) values( '语文 ',     '张三;李四 ') 
 insert into A(科目,学生) values( '数学 ',     '张三;李四 ')   
 -- 建立一个辅助的临时表就可以了 
 SELECT TOP 8000