现有A\B两个表,其结构相同,都已存在.我要把A表中的数据全部插入到B表中,然后清空A表.
我用INSERT INTO .....语句.如果B表不存在的话是可以的.我实在是不知道该怎么办了.
帮忙给个正确的方法.

解决方案 »

  1.   

    INSERT INTO B表 SELECT * FROM A表
    TRUNCATE TABLE 表A
      

  2.   

    --这样?
    Insert B Select * From A
    Truncate Table A
    ---
    如果B表不存在的话是可以的.我实在是不知道该怎么办了.??
    不太明白!
      

  3.   

    要不然先判断一下表B是否存在?
    if object_id('表B') is not null
    begin
          INSERT INTO B表 SELECT * FROM A表
          TRUNCATE TABLE A表
    end
      

  4.   

    select * into B from A
    where 1 = 1
      

  5.   

    已经存在:Insert into B
    Select * From A
    Where  1 =1 清空A: Truncate Table A
      

  6.   

    TO zjdyzwx 
    不行,提示数据库中已存在B 表
      

  7.   

    已经存在:Insert into B
    Select * From A
    Where  1 =1 清空A: Truncate Table A
    这里比较奇怪,A表中有40条记录。B表中只有3条,我用你的方法从B表中向A中插入是可以的,但从A表中向B中插入时跟楼上各位的方法的提示一样。你可以试一下。
      

  8.   

    也就是说A表只能向B表插入3条记录?如果这样真是奇怪,楼主的B表是不是有触发器啊.
      

  9.   

    楼主可能要用两条SQL语句做了, try below:select * into #t from a 
    where a.[id] not in 
    (select [id] from b)insert into b
    select * from #t--同时运行这两条SQL
      

  10.   

    哦对了最后在delect * from a上面a.[id]表示a的主码
      

  11.   

    晕,复制粘贴把delete语句都写错了, 该打该打....
      

  12.   

    IF object_id('B') IS NOT NULL
    INSERT B SELECT * FROM A
    ELSE
    SELECT * INTO B FROM A
    TRUNCATE TABLE A
      

  13.   

    在一个SQL-SERVER数据库中有两个表A和B,B表中有主键,A中没有,这两个表除了B表中设置了主键其他的就是一样,当然表中的记录是不一样的。我现在程序中是把数据先存在B表中,加上主键是为了防止出现重复记录。A表是以前就存在的一个表。我要定时的把B表中的记录存到A表中去。
    A表
    ADDR    TIME        CC    DD
    1       2006-07-01  160   1
    4       2006-07-01  156   1
    。。1       2006-07-01  143   2
    没有主键
    B表
    ADDR    TIME        CC    DD
    1       2006-07-02  160   1
    4       2006-07-02  156   1
    。。1       2006-07-02  143   2
    主键  为ADDR TIME把B表中的记录复制(就是存到)到A表中。然后在把B表清空,这两个表在库中已经存在。
    逍遥大哥,我这样写因该是说清楚了吧。
      

  14.   

    我来翻译一下?我猜楼主的意思是A,B表在数据库中是存在的, 楼主的"如果B表不存在的话是可以的.我实在是不知道该怎么办了", 这里的"不存在"可能是B表中不存在数据的意思, 而不是B表对象存在否??我这样理解对么? 楼主?
      

  15.   

    IF object_id('A') IS NOT NULL
    INSERT A SELECT * FROM B
    WHERE RTRIM(ADDR) + '.' + RTRIM(TIME)
    NOT IN (
    SELECT RTRIM(ADDR) + '.' + RTRIM(TIME) FROM A
    )
    ELSE
    SELECT * INTO A FROM B
    TRUNCATE TABLE B
      

  16.   

    楼主题目中说把A记录移动到B, 若B表有主码, 且有和A记录相同的记录的话我估计是有问题的;但是楼主的解释又是把 B移动到A, 既然A没有主码, 那么还有有什么问题?____________________我不明白了..
      

  17.   

    INSERT A 
    SELECT b.* from B b,A a
    WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
      

  18.   

    原来楼主的'B表已存在'是指要添加的行已经存在于B表中,再添加时违反了B表主键约束.
      

  19.   

    糊涂了...A,B搞颠倒了.这样:
    INSERT B
    SELECT a.* from A a,B b
    WHERE not exists(select 1 from A where ADDR = b.ADDR and TIME = b.TIME)
    TRUNCATE TABLE A
      

  20.   

    哎,愁死我了。我语文怎么这么差。看来我是越说越糊涂了。
    我想把B表中的记录插入到A表中。插入后再把B表中的记录清空,B表仍然存在,只是没有记录了。删除数据没有问题,不用给我解答了,就告我怎么插入吧。
    我用的方法是:INSERT INTO A SELECT * FROM B
    结果提示:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。
    各位给的答案当中很多都是这种提示。
    我想SQL中因该有办法处理呀,并且不因该太复杂。记得用VF操作SQL-SERVER数据库时这种方法是可以的呀。
      

  21.   

    A 和 B两个表中没有相同的记录。A中没有主键,B中有。
      

  22.   

    楼主这样插入记录应该不会出现问题:
    INSERT A 
    SELECT b.* from B b,A a
    WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
    楼主试了吗?
      

  23.   

    A B表弄反了,就按我后面说的从B表中向A表插入记录,B表有键,A没有,两个表中没有相同的记录。是我晕了,道歉。
    但是问题还是没有解决,拜托了。
      

  24.   

    请楼主替换表名后其它项不要改动试试.
    把B表插入到A表:
    INSERT A
    SELECT b.* from B b,A a
    WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)把A表插入到B表:
    INSERT B
    SELECT a.* from A a,B b
    WHERE not exists(select 1 from A where ADDR = b.ADDR and TIME = b.TIME)
    TRUNCATE TABLE A
    如果出错,请楼主给出错误提示.
      

  25.   

    把B表插入到A表:
    INSERT A
    SELECT b.* from B b,A a
    WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
    结果提示:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。
    只替换了A B的表名
      

  26.   

    奇怪了,请楼主检查一下A表是不是有INSERT触发器?
      

  27.   

    服务器: 消息 512,级别 16,状态 1,过程 XXXXXXXXXX,行 YYYY
    子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
    语句已终止。
    ------------------------------------------------------------------------------------
    请楼主找到上面提示中X对应的名称,应该是个触发器.
      

  28.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trade]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[trade]
    GOCREATE TABLE [dbo].[trade] (
    [addr] [varchar] (11) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [mtime] [varchar] (19) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [weight] [float] NULL ,
    [axes] [int] NULL 
    GO谢谢各位。我换了台机子用INSERT INTO A SELECT * FROM B就可搞定,当然各位的方法也一定行。我就是不明白了我机子上的库是从我可以用的那台机子备份,然后还原的呀。结贴