在a表中有字段b类型未知(因为涉及到数据库接口编程,我不能去数据库中看它的字段类型)。该表中没有字段c,现在我想将b字段的所有数据复制到c字段,请问我该怎么做。(我已经知道通过系统表获取数据类型的方法,也知道创建一个同一类型的字段c再update即可实现,但当一个表中字段类型太多,那复制字段就很费时间,我想请教一种更为简便的方法。实际上,我要做的是为字段更名,我知道可以使用存储过程实现,但是存储过程要修改系统表,有一定的危险,我在网上查到一种思路:复制这个字段数据到新的更名后字段中再删除原字段。现在我想知道如何复制数据到新的字段。如果用select into 会连同字段名一起复制,请各位高手告诉小弟究竟如何实现同表复制新字段。)

解决方案 »

  1.   

    用 sp_rename 直接修改数据表中的字段名即可;不会有问题。
      

  2.   

    将表 customers 中的列 contact title 重命名为 title。
    EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'
      

  3.   


    if object_id('tb') is not null drop table tb 
     go 
    create table tb(a varchar(10),b varchar(10))
    insert tb select '张三','A01'
    union all select '张二','A02'
    union all select '张一','A04'
    union all select '张四','A01'
    go
    alter table tb add c sql_variantupdate tb set c=bselect * from tb
    /*
    a            b           c
    -------    -------     --------
    张三         A01        A01
    张二         A02        A02
    张一         A04        A04
    张四         A01        A01(4 行受影响)
    */
      

  4.   

    谢谢,但是我不想用存储过程,毕竟要修改系统系统表,sql也会有警告提示。
      

  5.   

    补充:我不想修改syscolumns表,毕竟人家是系统表,我只想学会复制字段的方法,谢谢大家。
      

  6.   

    update tablename set id1=id
    alter table tablename drop column id
    exec sp_rename 'tablename.id1','id'
      

  7.   

    那你就UPDATE,实在不明白楼主的意思。
      

  8.   

    先增加一列,不确定类型就用 sql_variant (这个列型除了text,ntext,timestamp等类型不能用它代替外,其它数据类型都可以用它来代替。)
    那个update就是复制b列到c列
      

  9.   

    update tb1 set a = b from ( select b from tb2) a
      

  10.   


    不想修改syscolumns 表,那就保存原来的列,添加一个新的列,列的内容指向原来的列(类似计算列)alter table tb
    add 列C as  rtrim(列B)
      

  11.   

    是啊 楼主的意思很费解啊
    select *, column1 into tableB from tableA
      

  12.   

    费解啊
    要得到字段类型 查询一下syscolumns表就可以了
      

  13.   

    谢谢三楼,刚才没看清楚,不好意思,用sql变型,我怎么没想到?不过,不能转换text,ntext等等,还是不太理想;谢谢十三楼,我这就去试一试。很有用,谢谢。我看也该结贴了,后面的朋友给出的回复,我要没看见请理解,我就看到13楼。12楼的朋友我是问同一张表,你的回答是两张表了谢谢。回答11楼,当时我才显示到4楼。回答9楼,我想用update必须要有一个已经存在的字段吧,但当时并没有字段,所以需要创建该字段,不过不知道原字段数据类型,所以不好创建。
      

  14.   

    回答14、15楼,14楼复制所以字段到新表(包括原字段名),而我需要的是更改字段名。如果我是一个字段查系统表很方便,但要是有10个字段,我就得查10遍系统表,然后创建10次字段,再update10次,然后再删除原字段,我还是喜欢在创建字段时就复制数据,然后再删除原字段的方法。
      

  15.   

    总结:三楼的方法,好处是可以添加新数据,但是缺点在于不兼容text型,我要复制text型的字段就不能用,不过结合查数据类型的方法,还是可以解决text型的问题。14楼的方法方便简单,但缺点在于,复制的列变为计算列不能进行更新与添加,解决方法为select into。