表aid     name
1      水泥,石灰,黄沙
2      砖头
3      水泥,石子,油漆
4      木材,玻璃,地板,窗表bid     name
1      水泥
2      石灰
3      黄沙
4      砖头
5      石子
6      油漆
7      木材
8      玻璃
9      地板
10     窗
一个字段里面会有很多具体名称的,至少二三十个,这有什么办法吗?

解决方案 »

  1.   

    declare @s varchar(2000)
    set @s=''
    select @s=@s+Name+',' from a 
    set @s=left(@s,len(@s)-1)
    declare @sql varchar(2000)
    set @sql=replace(@s,',',''' union all select ''')
    set @sql='set nocount on create table #t(id int IDENTITY(1,1),name varchar(20)) insert #t(name) select '''+@sql+''' select * from #t drop table #t'exec(@sql)
      

  2.   

    更正两个问题
    1、“,”和“,”的问题
    2、有重复,如水泥
    --建表
    create table a(id int, name varchar(30))
    go
    --加数据
    insert a
    select
    1,      '水泥,石灰,黄沙'
    union all
    select
    2,      '砖头'
    union all
    select
    3,      '水泥,石子,油漆'
    union all
    select
    4,      '木材,玻璃,地板,窗'
    go--测试语句
    declare @s varchar(2000)
    set @s=''
    select @s=@s+Name+',' from a 
    set @s=left(@s,len(@s)-1)
    declare @sql varchar(2000)
    set @sql=replace(@s,',',''' union select ''')
    set @sql='set nocount on create table #t(id int IDENTITY(1,1),name varchar(20)) insert #t(name) select '''+@sql+''' select * from #t drop table #t'exec(@sql)--结果
    id          name                 
    ----------- -------------------- 
    1           玻璃
    2           窗
    3           地板
    4           黄沙
    5           木材
    6           石灰
    7           石子
    8           水泥
    9           油漆
    10          砖头--去表
    drop table a