问题如下:
我有很多这样的表,列都超过了50列,
但是我要从别的数据库上获得新的数据并插入到这个表(我要更新表A,表B的结构和表B一样).
但是我用INERT INTO A SELECT * FROM B的话,因为其中有自动更新列不能插入.各位高手,除了一列列的打列名,请问还有什么好方法?

解决方案 »

  1.   

    我是说其中有那种NEWID()那样的列
      

  2.   

    --如果表A的数据不要了,可以设置自动增加列为
    set insert_identity 自增长列名 on--然后
    INERT INTO A SELECT * FROM B--再
    set insert_identity 自增长列名 on
      

  3.   

    简单的方法还有syscolumns获取表结构,动态执行。
    sql管理工具里面自动生成select和insert脚本。
      

  4.   

    DECLARE @STR VARCHAR(8000)
    SELECT @STR=ISNULL(@STR+',','')+NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('TB') AND NAME!='ID'
    SET @STR='INSERT A('+@STR+') SELECT '+@STR+' FROM B'
    EXEC(@STR)
      

  5.   

    更正--如果表A的数据不要了,可以设置自动增加列为
    set IDENTITY_INSERT 自增长列名 on--然后
    INERT INTO A SELECT * FROM B--再
    set IDENTITY_INSERT 自增长列名 on
      

  6.   


    A表的newid属性去掉改为普通列,这个不算改表结构。而且newid只是默认值,似乎不会影响插入,除非你有其他约束
      

  7.   

    我的那列格式是Newid()的全局标识.
      

  8.   

    哦,谢谢了,我能不能先把这列改成Varchar,更新后再改回来?
      

  9.   

    8楼的方案不错。动态执行。至于这种方式  set IDENTITY_INSERT 自增长列名 on
                还是有风险的。