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
INSERT A SELECT b.* from B b,A a WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
原来楼主的'B表已存在'是指要添加的行已经存在于B表中,再添加时违反了B表主键约束.
糊涂了...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
哎,愁死我了。我语文怎么这么差。看来我是越说越糊涂了。 我想把B表中的记录插入到A表中。插入后再把B表中的记录清空,B表仍然存在,只是没有记录了。删除数据没有问题,不用给我解答了,就告我怎么插入吧。 我用的方法是:INSERT INTO A SELECT * FROM B 结果提示:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。 各位给的答案当中很多都是这种提示。 我想SQL中因该有办法处理呀,并且不因该太复杂。记得用VF操作SQL-SERVER数据库时这种方法是可以的呀。
A 和 B两个表中没有相同的记录。A中没有主键,B中有。
楼主这样插入记录应该不会出现问题: 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表弄反了,就按我后面说的从B表中向A表插入记录,B表有键,A没有,两个表中没有相同的记录。是我晕了,道歉。 但是问题还是没有解决,拜托了。
请楼主替换表名后其它项不要改动试试. 把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 如果出错,请楼主给出错误提示.
把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的表名
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就可搞定,当然各位的方法也一定行。我就是不明白了我机子上的库是从我可以用的那台机子备份,然后还原的呀。结贴
TRUNCATE TABLE 表A
Insert B Select * From A
Truncate Table A
---
如果B表不存在的话是可以的.我实在是不知道该怎么办了.??
不太明白!
if object_id('表B') is not null
begin
INSERT INTO B表 SELECT * FROM A表
TRUNCATE TABLE A表
end
where 1 = 1
Select * From A
Where 1 =1 清空A: Truncate Table A
不行,提示数据库中已存在B 表
Select * From A
Where 1 =1 清空A: Truncate Table A
这里比较奇怪,A表中有40条记录。B表中只有3条,我用你的方法从B表中向A中插入是可以的,但从A表中向B中插入时跟楼上各位的方法的提示一样。你可以试一下。
where a.[id] not in
(select [id] from b)insert into b
select * from #t--同时运行这两条SQL
INSERT B SELECT * FROM A
ELSE
SELECT * INTO B FROM A
TRUNCATE TABLE 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表清空,这两个表在库中已经存在。
逍遥大哥,我这样写因该是说清楚了吧。
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
SELECT b.* from B b,A a
WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
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
我想把B表中的记录插入到A表中。插入后再把B表中的记录清空,B表仍然存在,只是没有记录了。删除数据没有问题,不用给我解答了,就告我怎么插入吧。
我用的方法是:INSERT INTO A SELECT * FROM B
结果提示:子查询返回的值多于一个,当子查询跟随在=、!=、〈、〉、〈=、〉=之后或子查询用作表达式时,这种情况是不允许的。
各位给的答案当中很多都是这种提示。
我想SQL中因该有办法处理呀,并且不因该太复杂。记得用VF操作SQL-SERVER数据库时这种方法是可以的呀。
INSERT A
SELECT b.* from B b,A a
WHERE not exists(select 1 from B where ADDR = a.ADDR and TIME = a.TIME)
楼主试了吗?
但是问题还是没有解决,拜托了。
把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
如果出错,请楼主给出错误提示.
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的表名
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
------------------------------------------------------------------------------------
请楼主找到上面提示中X对应的名称,应该是个触发器.
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就可搞定,当然各位的方法也一定行。我就是不明白了我机子上的库是从我可以用的那台机子备份,然后还原的呀。结贴