网站源码下载PR查询短网址
首页编程数据库网页图形冲浪邮件下载浏览器QQ系统办公软件站长安全手机邮件认证组网通信


网站首页 -> 数据教程 -> SQL技巧
多线程下不重复读取SQL Server的数据

发表日期:2010-7-18



在进行一些如发送短信、邮件的业务时,我们经常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送,发送完成后再将数据转移到历史表中,这样保证待发送表的数据一般情况下不会太多。如待发送表结构为:

Create Table SMS(ID int not null identity(1,1),Content varchar(1024),Status int not null,CreateTime datetime);

Status 取值:0未读取 1已读取

这样设计的好处是,不会因为后端有时发送过慢导致前端接收发送消息的请求出现问题,如发送短信的业务,有时由于运营商的网关原因发送太慢,这样前端可以先将用户的发送请求全部放在待发送表中,由后端进行慢慢发送。

 

在后端发送进程一般使用

Select top 100 * From SMS Where Status=0;这样的SQL取出未被读取的数据。

为了提高后端发送能力,需要部署多个进程同时从待发送表中取出数据进行发送,这样有时就会造成同一个记录被多个进程同时取出来,并发送的情况。

 

今天查了一下SQL Server 的MSDN,发现可以通过先更新同时通过deleted表(就像是在触发器中使用一样)取出的方式,来保证每条记录只会被读取一次。

declare @Rowid table(rowid int);
BEGIN
 set rowcount 100; --一次读取的行数
 --先将要读取的记录状态更新
 update Sms set [status]= 1  output deleted.ID into @Rowid Where [status] = 0;
 --读取刚更新状态的记录
 select  * from Sms where ID in (select Rowid from @Rowid);
END

http://www.cnblogs.com/qijun/archive/2010/07/16/sqlserver20100716.html



上一篇:Sql server分页的总结 人气:6401
下一篇:如何使用数据库引擎优化顾问优化数据库 人气:7244
网站文章搜索
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<SQL技巧教程>的内容
今日更新文章
·PS打造清爽艳丽的海景婚片
·Photoshop打造漂亮的黄绿色非主流MM
·PS调出MM秀丽清爽的色彩
·Photoshop打造洁白如玉的完美肌肤
·Photoshop给MM打造一幅光环艺术照
·Photoshop制作个性青黄色非主流效果
·PS给人物照片添加艺术背景
·Photoshop打造柔美的紫黄色时装美女图片
·Photoshop加强人像图片的质感并增加梦幻
·怎样让新站从开始就拥有高权重
·SEO市场的高端盈利模式详细分解
·站内高质量原创文章有利于网站优化
本栏目推荐文章
·Oracle数据库中通过ADO数据存取分析
·[视频教程]Microsoft_SQL Server 2005盛
·Sql server安装2005中AdventureWork
·常见数据库系统之比较 - DB2数据库
·RH8实现多用户多语言登陆
·帮你解决Oracle 9i和Tomcat的端口冲突
·影响ORACLE汉字显示的字符集
·从Oracle数据库到SQL Server数据库主键的
·关于UltraLite所不提供的ASA功能的介绍
·Linux_FAQ之四:系统配置
·Tomcat配置技巧Top 10 [ZT]
·Decode 函数的用法
Copyright © 2005-2012 www.Devdao.com All rights reserved | 沪ICP备05001343号 sitemap