怎样把A表中的数据全部插入到B表中,两个表的结构相同.

sxzmg 2006-07-19 07:56:58
现有A\B两个表,其结构相同,都已存在.我要把A表中的数据全部插入到B表中,然后清空A表.
我用INSERT INTO .....语句.如果B表不存在的话是可以的.我实在是不知道该怎么办了.
帮忙给个正确的方法.
...全文
2508 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire_qu 2006-07-20
  • 打赏
  • 举报
回复
MARK
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
是触法器的原因,再次感谢
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trade]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[trade]
GO

CREATE 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就可搞定,当然各位的方法也一定行。我就是不明白了我机子上的库是从我可以用的那台机子备份,然后还原的呀。结贴
liangpei2008 2006-07-19
  • 打赏
  • 举报
回复
是的,世界杯过了,改个名字新鲜新鲜:)
ReViSion 2006-07-19
  • 打赏
  • 举报
回复
哈哈
hellowork 2006-07-19
  • 打赏
  • 举报
回复
楼上改名字了:)
liangpei2008 2006-07-19
  • 打赏
  • 举报
回复
同意楼上,是触发器在做祟
hellowork 2006-07-19
  • 打赏
  • 举报
回复
服务器: 消息 512,级别 16,状态 1,过程 XXXXXXXXXX,行 YYYY
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
------------------------------------------------------------------------------------
请楼主找到上面提示中X对应的名称,应该是个触发器.
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
TO 打魔兽
提示还是:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。
不会是我机子的问题吧,我找一台机子试试。
Mark2Win 2006-07-19
  • 打赏
  • 举报
回复
LZ给出建表的SQL?
hellowork 2006-07-19
  • 打赏
  • 举报
回复
奇怪了,请楼主检查一下A表是不是有INSERT触发器?
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
把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的表名
fcuandy 2006-07-19
  • 打赏
  • 举报
回复
上面我已经把语句写了.你自己把A,B说反了,自己改下语句把表名调换过来不行?
hellowork 2006-07-19
  • 打赏
  • 举报
回复
请楼主替换表名后其它项不要改动试试.
把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
如果出错,请楼主给出错误提示.
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
A B表弄反了,就按我后面说的从B表中向A表插入记录,B表有键,A没有,两个表中没有相同的记录。是我晕了,道歉。
但是问题还是没有解决,拜托了。
hellowork 2006-07-19
  • 打赏
  • 举报
回复
楼主这样插入记录应该不会出现问题:
INSERT A
SELECT b.* from B b,A a
WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
楼主试了吗?
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
A 和 B两个表中没有相同的记录。A中没有主键,B中有。
sxzmg 2006-07-19
  • 打赏
  • 举报
回复
哎,愁死我了。我语文怎么这么差。看来我是越说越糊涂了。
我想把B表中的记录插入到A表中。插入后再把B表中的记录清空,B表仍然存在,只是没有记录了。删除数据没有问题,不用给我解答了,就告我怎么插入吧。
我用的方法是:INSERT INTO A SELECT * FROM B
结果提示:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。
各位给的答案当中很多都是这种提示。
我想SQL中因该有办法处理呀,并且不因该太复杂。记得用VF操作SQL-SERVER数据库时这种方法是可以的呀。
hellowork 2006-07-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

hellowork 2006-07-19
  • 打赏
  • 举报
回复
原来楼主的'B表已存在'是指要添加的行已经存在于B表中,再添加时违反了B表主键约束.
加载更多回复(22)

34,871

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧