select top 0 *
into 新表名
from 原表名

解决方案 »

  1.   

    告诉大家,这样的语法是不行的,我刚刚试试了
    alter proc p_getuserinfos
    as 
     select * from managersgoselect top 0 *  into #temp  from managers insert  #temp exec p_getuserinfosselect * from #tempdrop table  #temp返回的错误:
    服务器: 消息 213,级别 16,状态 7,过程 p_getuserinfos,行 3
    插入错误: 列名或所提供值的数目与表定义不匹配。这是表定义:
    alter TABLE [Managers] 
    (
    [ManagerID] [int] IDENTITY (1, 1) NOT NULL ,
    [ManagerAccounts] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ManagerName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Description] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [PassWord] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     PRIMARY KEY  CLUSTERED 
    (
    [ManagerID]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    错误的原因应该是:[ManagerID] [int] IDENTITY (1, 1) NOT ,ManagerID为自增长的
      

  2.   

    你定义的表的结构应该与存储过程p_getuserinfos返回的结果集的结构相同:create table #temp
    (
       字段定义.....
    )insert  #temp exec p_getuserinfosselect * from #tempdrop table  #temp
      

  3.   

    返回的错误:
    服务器: 消息 213,级别 16,状态 7,过程 p_getuserinfos,行 3
    插入错误: 列名或所提供值的数目与表定义不匹配。
    --------->此错误并不是你说的:[ManagerID] [int] IDENTITY (1, 1) NOT ,ManagerID为自增长的,
    而是列数量及类型对应不上,估计是你存储过程p_getuserinfos返加的结果集多了一个字段(ManagerID),因为此字段是自增长的,插入时不需要对应字段.
      

  4.   

    create table t(id int identity(1,1),A1 INT)
    insert t select 2--ok
    insert t select 1,2--err
    /*仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 't' 中为标识列指定显式值。*/
      

  5.   

    你定义的表的结构应该与存储过程p_getuserinfos返回的结果集的结构相同:select * into #temp form  [Managers]  where 1=0SET IDENTITY_INSERT #temp ON --由于有自动增长的列insert  #temp exec p_getuserinfosSET IDENTITY_INSERT #temp Off --
    select * from #tempdrop table  #temp
    就不会出现上面个错误了
      

  6.   

    SET IDENTITY_INSERT #temp ON 原来就这么简单啊,给分了
      

  7.   

    强人继续进来吧 
    select top 0 * into #temp from  Managers
    SET IDENTITY_INSERT #temp ON  
    insert #temp exec sp_cursoropen  @P1 output,@StrSql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output  执行是返回如下的错误:
    服务器: 消息 8106,级别 16,状态 1,行 4
    表 '#temp' 没有标识属性。无法执行 SET 操作。
    那么应当如何判断一个表是否包含有标识属性的字段呢,如果#temp包含了标识属性的字段而没加SET IDENTITY_INSERT #temp ON在执行下条插入语句时肯定又返回错误啊!