有一个表A,有很多字段,写语句创建临时表太麻烦,就
if object_id('Tempdb..#TreeInfo') is not null
drop table #TreeInfoSELECT * INTO #TreeInfo 
FROM ( SELECT * from Customers where 1<>1 )AS treeinfo这样创建了一个临时表在Customers表中有一个tmpID是自增列,非主键然后执行
insert into #TreeInfo 
SELECT * from [Customers]
提示
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'#TreeInfo'中的标识列指定显式值。
然后执行
SET   IDENTITY_INSERT   #TreeInfo   ON 
insert into #TreeInfo 
SELECT * from [Customers]依旧提示
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'#TreeInfo'中的标识列指定显式值。然后执行alter table #TreeInfo drop column TmpID
alter table #TreeInfo add  TmpID intinsert into #TreeInfo 
SELECT * from [Customers]到时成功了,但由于改变了列的顺序,导致前面某个bool型的字段值都有问题了。请教如何解决,谢谢了

解决方案 »

  1.   

    alter table #TreeInfo alter column TmpID int
      

  2.   

    多谢楼上了~~~
    执行了
    alter table #TreeInfo alter column TmpID int
    insert into #TreeInfo 
    SELECT * from [Customers]依旧提示
    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'#TreeInfo'中的标识列指定显式值。
      

  3.   

    SET IDENTITY_INSERT products ON
      

  4.   

    SET IDENTITY_INSERT #TreeInfo ON   --打开标识值插入insert into #TreeInfo  
    SELECT * from [Customers]   --应该能成功了哦。奇怪...
      

  5.   

    我也奇怪呢
    单执行
    SET IDENTITY_INSERT #TreeInfo ON   
    成功再执行
    insert into #TreeInfo  
    SELECT * from [Customers] 
    提示
    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'#TreeInfo'中的标识列指定显式值。3句连起来执行,还一样出错,郁闷了
      

  6.   

    全写出来列太多了~~~想了个办法,把Customers表中的自增列tmpid,移到最后
    然后执行
    alter table #TreeInfo drop column TmpID
    alter table #TreeInfo add TmpID int
    反正也是最后一列,不影响前面列的顺序
    然后
    insert into #TreeInfo   
    SELECT * from [Customers]  
    就可以了~~呵呵,暂时这么这凑合用了
      

  7.   

    可以在Customers里新加一列 colt int ,把tmpid数据拷贝过去,在把tmpid drop掉试试
      

  8.   

    不能有sql的方式取消一个列的自增么?
      

  9.   

    --表TmpID的值与[Customers]表相同
    SET IDENTITY_INSERT #TreeInfo ON   --打开标识值插入
    insert into #TreeInfo(TmpID,col1,col2.....) --所有列名列表
    SELECT * from [Customers]  
    SET IDENTITY_INSERT #TreeInfo OFF   --关闭标识值插入--表TmpID的值与[Customers]表可能不同insert into #TreeInfo(col1,col2.....) --除了自增列TmpID外的所有列名列表
    SELECT * from [Customers] 
      

  10.   

    sp_configure 'allow update',1
    reconfigure with override
    go
    update syscolumns set colstat=0 where colstat=1 and id=object_id('tablename')
    go
    sp_configure 'allow update',0
    reconfigure with override
    http://topic.csdn.net/u/20100325/14/1dd919bc-194b-42d8-9673-f0efc8796755.html
      

  11.   

    我真天才,一种变通方法
    if object_id('Tempdb..#TreeInfo') is not null
    drop table #TreeInfoSELECT 1 col1,* INTO #TreeInfo  --临时表最前面增加一个int 列,如果此列与TmpID类型相同。
    FROM ( SELECT * from Customers where 1<>1 )AS treeinfo
    GO
    alter table #TreeInfo drop column TmpID --删除自增列
    --如果可以更改临时表列名成的话把col1改为TmpID ,不改也无所谓,但后面引用的时候要注意。
    GO
    insert into #TreeInfo  
    SELECT * from [Customers]
    GO