如题,奇怪的是.
在查询分析器里select * into newTable from OldTable后,然后插入newTable是没问题的.插入newTable还是有问题.
以为没问题了,但是过后又出现这样的问题,然后再重新select * into下又可以插入了,莫名其妙.
请问这是为什么呢???

解决方案 »

  1.   

    写错了..........更改如下:
    在查询分析器里select   *   into   newTable   from   oldTable后,然后插入newTable是没问题的.插入oldTable还是有问题. 
    但是过后又出现这样的问题,然后再重新select   *   into下又可以插入了,莫名其妙. 
    请问这是为什么呢???
      

  2.   

    newTable和oldTable的结构完全相同吗?字段名,字段个数,字段类型,字段相应顺序都不能有出入,要完全相同。
      

  3.   

    to qawszx:
    表结构当然是一样的.
    to Mskycn:
    表里有没有子增列问题依旧.
      

  4.   

    能否把你newTable和oldTable的表结构贴出来看一下?
      

  5.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[oldTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[oldTable]
    GOCREATE TABLE [dbo].[oldTable] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [Mobile_Consumer_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Mobile_Type] [int] NOT NULL ,
    [Mobile_Sim] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_SN] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_AddTag] [bit] NULL ,
    [Mobile_EditTag] [bit] NULL ,
    [CanWebQuery] [bit] NULL ,
    [CreateDate] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Attribute] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [UpStr] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_VehicleRegistration] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[newTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[newTable]
    GOCREATE TABLE [dbo].[newTable] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [Mobile_Consumer_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Mobile_Type] [int] NOT NULL ,
    [Mobile_Sim] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_SN] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_AddTag] [bit] NULL ,
    [Mobile_EditTag] [bit] NULL ,
    [CanWebQuery] [bit] NULL ,
    [CreateDate] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Attribute] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [UpStr] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_VehicleRegistration] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO这个是表结构,既然是select       *       into
    那么new and old都是一样。执行的sql如下:
    insert into newTable -- or oldTable
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration) 
    values('20','214',101,'131','SN111111113',0,1,1,'2007-11-17','广州新蓝德','2007-11-17 11:39:18添加本车辆','粤A88888')
      

  6.   

    任何错误都有原因,没啥好奇怪滴,分析一下就明白了,哈select * into newTable from oldTable
    这句功能就是导表,不会有问题,因为楼主说了表结构完全相同!如果说接下来插入oldTable有问题,那问题肯定出在insert语句上,
    尽管没看到sql语句,不过十有八九楼主是用字符串拼接滴sql语句,
    如果是存储过程或用参数形式执行sql肯定没问题。
    问题很可能出在插入的值上面,例如:插入值中带有单引号,导致
    插入语句异常(与异常信息提示一致)!
      

  7.   

    建立两个表分别用你写的插入语句插入数据没有问题
    只建oldTable 用 select   * into newTable from oldTable创建newTable并插入数据也没有问题
    又看了一遍你的问题,但是还是不明白你想要问什么,你是怎么插入的?
      

  8.   

    To qawszx
    蓝色妖姬呵呵,真认真,楼主写滴都是正确滴!错就错在执行滴sql语句上(楼主就是没分析这点),
    原因上面已经分析了,因为俺也犯过这种错误,哈
      

  9.   

    呵呵,楼上的兄台所言不虚,
    但是执行语句我是放在查询分析器里执行的,一样有问题。
    执行select * into后插入newTable可以,但插入oldTable还是不行,这应该可以说明我的插入语句没有错误。
    至于为什么过段时间newTable又不能插入了。反复select * into才能插入到新表(没有一次可以插入旧表的)
    这个才是我百思不得其解的问题。
      

  10.   

    首先假设AAA表,表结构已贴出!
    在查询分析器里执行下句,ERROR:插入错误: 列名或所提供值的数目与表定义不匹配。
    insert into AAA --AAA or BBB or CCC
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration) 
    values('20','214',101,'131','SN111111113',0,1,1,'2007-11-17','广州新蓝德','2007-11-17 11:39:18添加本车辆','qwe4213')然后
    select * into BBB from AAA 执行以上语句插入BBB:OK。没问题!
    ............................假设过1个小时后.................................
    执行以上语句插入BBB: ERROR:插入错误: 列名或所提供值的数目与表定义不匹配。然后
    select * into CCC from BBB 执行以上语句插入CCC:OK。没问题!
    ............................假设过1个小时后.................................
    执行以上语句插入CCC: ERROR:插入错误: 列名或所提供值的数目与表定义不匹配。
    ...DDD...
    ...EEE...
    ...FFF...
    .........
    .........不知清楚否?????
      

  11.   

    使用 SELECT INTO 插入行
    SELECT INTO 语句创建一个新表,并用 SELECT 的结果集填充该表。新表的结构由选择列表中表达式的特性定义,例如:SELECT Shippers.*, Link.Address, Link.City,
                       Link.Region, Link.PostalCode
    INTO NewShippers
    FROM Shippers
         JOIN LinkServer.DB.dbo.Shippers AS Link
           ON (Shippers.ShipperID = Link.ShipperID)SELECT INTO 可将几个表或视图中的数据组合成一个表。也可用于创建一个包含选自链接服务器的数据的新表。
    以上摘自 SQL Server 联机丛书!楼主说“反复select * into才能插入到新表”?!这是干嘛呀,如果newTable已存在,
    是不能再次执行 select * into newTable from oldTable 的!!!根据楼主滴描述,俺怀疑oldTable上存在未提交滴事务,不过sql异常信息提示又不太像,哈
      

  12.   

    倒塌............是AAA、BBB、CCC、DDD、EEE、FFF........表,每次select * into 表都不同的
    但是都是刚开始可以插入,过后就不能插入了.
      

  13.   

    CREATE TABLE [AAA] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [Mobile_Consumer_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Mobile_Type] [int] NOT NULL ,
    [Mobile_Sim] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_SN] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_AddTag] [bit] NULL ,
    [Mobile_EditTag] [bit] NULL ,
    [CanWebQuery] [bit] NULL ,
    [CreateDate] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [Attribute] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [UpStr] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
    [Mobile_VehicleRegistration] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOinsert into AAA 
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration)   
    values( '20', '214', 101, '131', 'SN111111113',0,1,1, '2007-11-17', '广州新蓝德', '2007-11-17 11:39:18添加本车辆', 'qwe4213')
    -- (所影响的行数为 1 行)select * into BBB from AAA 
    -- (所影响的行数为 1 行)insert into BBB
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration)   
    values( '20', '214', 101, '131', 'SN111111113',0,1,1, '2007-11-17', '广州新蓝德', '2007-11-17 11:39:18添加本车辆', 'qwe4213')
    -- (所影响的行数为 1 行)select * into CCC from BBB
    -- (所影响的行数为 2 行)insert into CCC
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration)   
    values( '20', '214', 101, '131', 'SN111111113',0,1,1, '2007-11-17', '广州新蓝德', '2007-11-17 11:39:18添加本车辆', 'qwe4213')
    -- (所影响的行数为 1 行)
    -- CCC 里面三条数据除了 id 不一样其他字段完全相同!楼主说............................假设过1个小时后................................. 
    执行以上语句插入BBB:ERROR:插入错误:列名或所提供值的数目与表定义不匹配。首先与时间无关,不过与执行的语句有关,如果还是这句
    insert into AAA -- or BBB or CCC
    (Mobile_Consumer_ID,Mobile_ID,Mobile_Type,Mobile_Sim,Mobile_SN,Mobile_AddTag,Mobile_EditTag,CanWebQuery,CreateDate,Attribute,UpStr,Mobile_VehicleRegistration)   
    values( '20', '214', 101, '131', 'SN111111113',0,1,1, '2007-11-17', '广州新蓝德', '2007-11-17 11:39:18添加本车辆', 'qwe4213')
    肯定不报错!否则,请重新安装 SQL Server!楼主请仔细检查insert语句吧!
      

  14.   

    感谢楼上的兄台.还真的是报错了,呵呵,重装下SQL试下,再次感谢。结贴。
      

  15.   

    其实现在问题就集中在 insert 语句上!开个“事件探查器”跟一下就全明白了!