sqlserver 2008 BULK insert 如何实现发现有重复索引是更新数据 20

比如:a列b列1a2b3c4d5ebulkinserta列b列2b3cc4d5e6f插入后希望得到1a2b3cc4d5e6f因为每次更新的数据很多,大概每小时都会去更新2... 比如:
a列 b列

1 a
2 b
3 c
4 d
5 e

bulk insert

a列 b列

2 b

3 cc
4 d
5 e
6 f

插入后希望得到
1 a
2 b
3 cc
4 d
5 e
6 f
因为每次更新的数据很多,大概每小时都会去更新20万条数据。所以才使用bulk insert .
表是用户表,每次取在线的用户,bulk insert进用户总表。如果重复,证明他活着的,就需要更新他的时间。

使用UPDATE一个是速度太慢,一个是日志受不了。

如果使用update 大概语句是 update tableA set MyDateTime=getdate() where userid in (20万个id)
然后再bulk insert 补充新上线的

效率低。。
展开
 我来答
百度网友8a627e7
2015-10-26 · TA获得超过304个赞
知道小有建树答主
回答量:705
采纳率:50%
帮助的人:463万
展开全部
sqlsever数据存在就更新,不存在就插入的两种方法
两种经常使用的方法:

1. Update, if @@ROWCOUNT = 0 then insert

UPDATETable1 SETColumn1 = @newValue WHEREId = @id

IF@@ROWCOUNT= 0

BEGIN

INSERT INTOTable1 (Id, Column1) VALUES(@id, @newValue)

END

如果一行数据存在更新就有效,否则插入将被执行.个人感觉这种方法倾向于数据多半存在于数据表中的情况;

2. If row exists update, otherwise insert

IFEXISTS(SELECT* FROMTable1 WHEREId = @id)

BEGIN

UPDATETable1 SETColumn1 = @newValue WHEREId = @id

END

ELSE

BEGIN

INSERT INTOTable1 (Id, Column1) VALUES(@id, @newValue)

END

在这种方法,select语句执行后紧接着就是执行update或是insert,消耗资源是少与方法一的.
追问
使用UPDATE一个是速度太慢,一个是日志受不了。

如果使用update 大概语句是 update tableA set MyDateTime=getdate() where userid in (20万个id)
然后再bulk insert 补充新上线的

效率低。。
追答
走存储过程,每次一条,in速度太慢了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式