--测试表及数据
declare @t table(modename varchar(20),enNew varchar(8000))
insert into @t
select '订单管理','202;203;204;208;209;301;302;303;304;305;306;307;308'--生成截位判断位置临时表,根据情况适当增加数值
select top 900 [id]=identity(int,1,1) into #temp_table 
from (select top 30 id from syscolumns) a,
     (select top 30 id from syscolumns) b
--获取记录(注:如果插入表时出现错误,可作为子查询插入)
select a.modename,username=substring(a.enNew,b.[id],charindex(';',a.enNew+';',b.[id])-b.[id]),enNew=1
from @t a,#temp_table b
where substring(';'+a.enNew,b.[id],1)=';' 
--删除测试
drop table #temp_table
/*结果
订单管理 202 1
订单管理 203 1
订单管理 204 1
订单管理 208 1
订单管理 209 1
订单管理 301 1
订单管理 302 1
订单管理 303 1
订单管理 304 1
订单管理 305 1
订单管理 306 1
订单管理 307 1
订单管理 308 1*/

解决方案 »

  1.   

    非常谢谢rivery(river)!这个做法很有效率!
    本想现在结贴,但想以为了让更多的人愿意学习一下,迟两天再结贴!
      

  2.   

    declare @str varchar(100)
    set @str='202;203;204;208;209;301;302;303;304;305;306;307;308'
    declare @sql varchar(100)
    set @sql='select col='
    select @sql=@sql+''''+replace(@str,';','''union all select ''')+''''
    exec(@sql)
      

  3.   

    lxzm1001(*蓝星之梦*)的地道些。set @sql='select col='
    select @sql=@sql+''''+replace(@str,';','''union all select ''')+''''==>select @sql='select col='''+replace(@str,';','''union all select ''')+''''