如题
比如2个表,表1(比如是选课代码表)为:
  编号   |  字段2    | 字段3 |
  001    |  美术     | 360   |
  002    |  英语     | 334   |
  003    |  体育     | 54    |
  004    |  考古     | 56    |
......字段2对应的代码是字段3,如美术对应的代码是360.
表2(比如是学生选课表)为:(比如001学生他选了:美术,英语)
  字段1  |  字段2          |  
  001    |  美术,英语      | 
  002    |  英语,考古      |
  003    |  考古           | 
  004    |  考古,美术,体育 |
......现在我想把表2里的字段2对应地替换(更新)为表1的字段3代码,能实现吗?
替换后应该是:
  字段1  |  字段2       |  
  001    |  360,334     | 
  002    |  334,56      |
  003    |  56          | 
  004    |  56,360,54   |
......
谢谢!

解决方案 »

  1.   

    create table ta (编号 varchar(5) ,  字段2  varchar(10), 字段3 int )
    insert into ta select  '001'    ,  '美术'     , 360  
    union all select   '002'    ,  '英语'     , 334   
    union all select  '003'    ,  '体育'    , 54    
    union all select  '004'    ,  '考古'     , 56    
    create table tb (字段1 varchar(5) ,  字段2  varchar(100))
     insert into tb select  '001'    ,  '美术,英语'    
    union all select  '002'    ,  '英语,考古'    
    union all select  '003'    ,  '考古'            
     union all select '004'    ,  '考古,美术,体育' 
    create function exchange(@sstr varchar(100))
    returns varchar(100)
    as
    begin
    declare @str varchar(100)
    set @str=''
    select @str=@str+','+RTRIM(字段3) FROM ta where charindex(字段2+',',@sstr+',')>0
    select @str=stuff(@str,1,1,'')
    return @str
    endselect 字段1,dbo.exchange(字段2) from tb
      

  2.   

    运行了下提示:
    服务器: 消息 208,级别 16,状态 1,行 1
    对象名 'dbo.exchange' 无效。
    不知道是怎么运行的..还是我的权限问题
      

  3.   

    还是服务器: 消息 208,级别 16,状态 1,行 1
    对象名 'dbo.exchange' 无效。
      

  4.   

    create table ta (编号 varchar(5) ,  字段2  varchar(10), 字段3 int )
    insert into ta select  '001'    ,  '美术'     , 360  
    union all select   '002'    ,  '英语'     , 334   
    union all select  '003'    ,  '体育'    , 54    
    union all select  '004'    ,  '考古'     , 56    
    create table tb (字段1 varchar(5) ,  字段2  varchar(100))
     insert into tb select  '001'    ,  '美术,英语'    
    union all select  '002'    ,  '英语,考古'    
    union all select  '003'    ,  '考古'            
     union all select '004'    ,  '考古,美术,体育' go
    create function exchange(@sstr varchar(100))
    returns varchar(100)
    as
    begin
    declare @str varchar(100)
    set @str=''
    select @str=@str+','+RTRIM(字段3) FROM ta where charindex(字段2+',',@sstr+',')>0
    select @str=stuff(@str,1,1,'')
    return @str
    end
    goselect 字段1,dbo.exchange(字段2) from tbgo
    drop table ta,tb
    drop function exchange