VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1449|回复: 11

求:把一个表数据插入到已经存在的表

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-14 18:00:02 | 显示全部楼层 |阅读模式
我把计算得到的数据放到表A中(大量数据),然后把A的数据插入到数据库表B中,A为在程序定义的表,与表B结构相同,且存在两列做为主键,如果B表中存在记录就不插入(或更新也可)。一条条插入太费时间(数据量大),加上是网络传输,不怎么可取。能用存储过程实现吗?能传递一个表过去吗?然后后台处理?或别的好办法????
回复

使用道具 举报

0

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-14 18:30:01 | 显示全部楼层
UPDATE B
SET B.value_col1=A.value_col1
,B.value_col2=A.value_col2
...
FROM A, B
WHERE B.key_col1=A.key_col1
AND B.key_col2=A.key_col2

--插入不存在的
INSERT INTO B
(col1, col2, col3, ... )
SELECT col1, col2, col3, ...
FROM A
WHERE NOT EXISTS
        (SELECT 1
        FROM B
        WHERE B.key_col1=A.key_col1
        AND B.key_col2=A.key_col2)
回复

使用道具 举报

0

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-14 18:45:01 | 显示全部楼层
--更新已经存在的
UPDATE B
SET B.value_col1=A.value_col1
,B.value_col2=A.value_col2
...
FROM A, B
WHERE B.key_col1=A.key_col1
AND B.key_col2=A.key_col2

--插入不存在的
INSERT INTO B
(col1, col2, col3, ... )
SELECT col1, col2, col3, ...
FROM A
WHERE NOT EXISTS
        (SELECT 1
        FROM B
        WHERE B.key_col1=A.key_col1
        AND B.key_col2=A.key_col2)
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-14 20:45:01 | 显示全部楼层
靠,你计算时直接写到B表不得了,同样也是没有时插入,有则更新
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-7-20 09:45:01 | 显示全部楼层
楼主
是不是要这样
insert a(id,num)--计算列插入A表
select id, sum(num) from t

update b有就更新
set num=a.num
from a where b.id=a.id

insert b--没有就插入
select * from a where not exists(select 1 from b where id=a.id)
回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-20 10:45:01 | 显示全部楼层
select a.id id1,b.id id2 into #t from a left join b on a.id = b.id

insert into b(列)
select 列 from a inner join #t c on a.id = c.id1 where c.id2 is null

update b
set **********************
from a,#t c
where a.id = c.id1 and c.id2 is not null
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-20 18:45:01 | 显示全部楼层
使用insert into select from  where 将不匹配的数据排除在插入
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-24 22:45:01 | 显示全部楼层
可以使用Integration Services来做
回复

使用道具 举报

0

主题

12

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-7-24 23:30:01 | 显示全部楼层
加上是网络传输
------------------------------------------------------------------------
如果A、B两个表分别在不同的服务器上,使用链接服务器方式来做。

如之前诸位所描述,只需要不超过两条SQL语句就可以解决这个问题。

回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-27 22:00:01 | 显示全部楼层
分在两地的话,最好先把A表传到B表所在的服务器上再做。

根据你的需求,应该只是做insert就够了
---将A copy到本地
select into #A from [....].A

insert B(col1,col2...)
select A.col1,A.col2...
from #A A left join B on A.id = B.id
where B.id is null

对于大数据量的更新操作,如果要用事务记得一定要先做Update再做Insert,因为如果Update出错了,回滚的时间会相当的长。

如果超大数据量的更新,就不得不考虑到表上索引对更新效率的影响了,如果是每天做批量,不影响业务的话,可以将rename B表,然后B表和#A表做Union插入另一张C表,在C表上重建索引后rename为A表。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表