SQL server 数据库 关于 insert into …… select …… from …… 的问题 20

这个存储过程每分钟执行一次单线程(A表中除了插入还有修改[count]=3的都是多线程。)功能:就是将A表[count]>2的数据备份到B表,并将A表中已备份的数据删除掉... 这个存储过程每分钟执行一次单线程(A表中除了插入还有修改[count] = 3 的都是多线程。)
功能:就是将A 表[count] > 2 的数据备份到B表,并将A表中已备份的数据删除掉,

但是有时候A表的一条数据会在B表中备份多条(那个数据在A表中确实就一条),还有我看B表中插入时间都是相隔几毫

秒说明都是一次插入的,
我不明白为什么会出现这种情况

select distinct [id] into #A_temp from A where [count] > 2;
//判断是否有数据
if exists(select [id] from #A_temp)
begin
/**将已发送的记录导入到备份表中**/
insert into
B(
col1,
col2
)
select
col1,col2
from
A with(nolock)
where
[id] in (select [id] from #A_temp);
/**将已发送的记录导入到备份表中**/
--删除已备份的记录
delete from A where [id] in (select [id] from #A_temp);
end
展开
 我来答
海影幻
2016-11-04 · TA获得超过230个赞
知道小有建树答主
回答量:198
采纳率:75%
帮助的人:51.5万
展开全部
有可能是存储过程被同时执行多次(上一次还没执行到delete,第二次执行执行到判断是否有数据那里),对此你要使该过程在执行的时候下一条请求跳出或者等待,若是如此做了还会出现这种情况,你还是好好定位数据找情况
追问
不会,他是单线程的
while(true){
执行存储过程

暂停1分钟

}
追答
不瞒你说,其实我也出现过类似你这种情况,可以说我那也是单线程的,后面我就让他执行中另外若有执行这个存过的请求就直接跳出了,后面也没听客户说出现过翻倍的情况。很让人匪夷所思,我觉得是数据库端可能处理请求会搞成多次的了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式