谁能帮我写个函数?
谁能帮我写个函数?要求这个函数能处理一个类似 "1213|sds|sdf|ggg|ss "的字符串,能将这个用 "| "分隔出来字符串插入到一个临时表的一行,结果返回这个临时表。但是分隔符的个数不固定,也就是说这个字符串也可能是 "232|sb|sd|aa|ss|sd "或 "aa|xx|sd ",也就是说这个临时表的列可以动态创建,分隔出几个字符串就创建几个列,并可创建出列名!拜托各位老大!
------解决方案--------------------declare @str varchar(1000) 
 set @str =  '1213|sds|sdf|ggg|ss '   
 declare @Com table (Com varchar(100))   
 while charindex( '| ', @str) >  0 
 begin 
 insert @Com select left(@str, charindex( '| ', @str) - 1) 
 set @str = right(@str len(@str) - charindex( '| ', @str)) 
 end   
 select * from @Com
------解决方案----------------------分解字符号串 
 declare @str varchar(8000) 
 set @str =  '1213|sds|sdf|ggg|ss ' 
 declare @sql varchar(8000) 
 set @sql= 'select  ' ' '+replace(@str, '| ', ' ' ' union all select  ' ' ')+ ' ' ' ' 
 exec( @sql )          
 ----  
 1213 
 sds 
 sdf 
 ggg 
 ss 
------解决方案--------------------除非你的每个字符串中 "| "分隔符是一样多,否则就麻烦了,以下补的是一样多的情况: 
 create proc test 
     @sql varchar(1000), 
     @Tb varchar(20) 
 as 
 declare @i int   
 set @i=0 
 set @sql=@sql+ '| ' 
 while charindex( '| ',@sql)> 0 
 begin 
 set @sql=stuff(@sql,charindex( '| ',@sql),1, ' ' ' as A '+ltrim(@i)+ ', ' ' ') 
 set @I=@i+1 
 end 
 if object_id(@tb) is null 
     select @sql= 'select * into  '+@Tb+ ' from (select  ' ' '+left(@sql,len(@sql)-2)+ ') aa ' 
 else 
     select @sql= 'insert  '+@Tb+ ' select * from (select  ' ' '+left(@sql,len(@sql)-2)+ ') aa ' 
 exec(@sql) 
 go 
 exec test  '1213|sds|sdf|ggg|ss ', 'testTable ' 
 go 
 exec test  'xx|bb|sdf|www|ss ', 'testTable ' 
 select * from testTable