复杂的存储过程。中高级的水平的朋友请进

hyq03 2007-07-06 10:33:32
表名 tabl1
表的主要字段(假如当前有5000条记录)
ID Flag(1,20两种) NeedCardType(值1,2,3三种)
1 1 1
2 1 1
3 1 2
4 1 1
5 3 2
7 1 1
8 1 3
9 1 3
------------------------------------------------------
需要处理 Flag为1的值,
简单说明.
NeedCardType有三种值,1/2/3,[1/2]可以为单独队列,[3]在AllSame=0情况下要需要拆分到[1/2]队列
-------------------------------------------------------------------------------
需求:
现需要有3条线程需要处理里面的数据,某一时刻数据是变化的〔新纪录添加进来)
保证每个线程的数据不同重复,且每次每个线程处理的大小为1000,
每个线程附参数
1.CardType[0/1/2],0可以处理NeedCardType全部,1可以处理[1/3]值,2可以处理[2/3],3是共享的.
2.Total ,总口数
3.Id ,本次ID的值不会重复,递增1.,如果AllSame=0可能会重复,AllSame=1不会重复
4.AllSame(本次处理是否全部CardType是相同的(全部为1/2/0)),AllSame=0情况,NeedCardType=3需要拆分2个队列,分发到1或者3

比如:5个线程,参数
CardType Total Id AllSame(CardType不相同)
1 3 1 0
1 3 2 0
1 3 3 0
2 2 1 0
2 2 2 0
先拆NeedCardType=3拆开2个队列,加入到1/2队列.均分
-------------------------
CardType Total Id AllSame(CardType全相同)
1 5 1 1
1 5 2 1
1 5 3 1
1 5 4 1
1 5 5 1
处理全部为NeedCardType为1或3
------------------------------------------
CardType Total Id AllSame(CardType全相同)
0 5 1 1
0 5 2 1
0 5 3 1
0 5 4 1
0 5 5 1
处理全部.
-------------------------------------
如果是单线程,CardType为1.处理全部为1或3的.
如果是单线程,CardType为2.处理全部为2或3的.
如果是单线程,CardType为0.处理全部.
可能出现的问题,[每处理10条数据,修改Flag=3代表已处理]

如果开始每个线程都取到自己的数据集,都开始工作.由于处理速度不同,可能线程1完成.线程2/3都在工作,
线程2/3还有200条Flag为1的数据,线程1重新取数据,这样就会取出2/3线程正在处理的数据就出现重复.
我的思路:在所有线程都取到自己的数据集后.马上修改状态.保证最先完成的线程不会提取别的线程正在处理的数据.
但没有成功.就是每个线程提取到自己的数据后.其它线程不能在读操作.
注意,
1. 保证N个 线程,每个线程处理的数据大小是均分的.且每次每个线程大小为1000,
最后一个线程处理不能被整除的余数+自己要处理的数据.
2.在实现功能后,代码要精简,不要使用游标,和临时表。执行速度要快.
3.采用分页技术给每个线程要处理的数据

成功后,哥们请吃饭(如果是北京的朋友.)QQ:752235215
-----------------------
...全文
887 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ml_dark 2007-07-07
  • 打赏
  • 举报
回复
BS楼主,LZ肯定小学没毕业,需求描述得一塌糊涂。·!!!!!!!!!!!!
=============================================================
需要处理 Flag为1的值,
简单说明.
NeedCardType有三种值,1/2/3,[1/2]可以为单独队列,[3]在AllSame=0情况下要需要拆分到[1/2]队列
-------------------------------------------------------------------------------
需求:
现需要有3条线程需要处理里面的数据,某一时刻数据是变化的〔新纪录添加进来)
保证每个线程的数据不同重复,且每次每个线程处理的大小为1000,
每个线程附参数
1.CardType[0/1/2],0可以处理NeedCardType全部,1可以处理[1/3]值,2可以处理[2/3],3是共享的.(3是共享?共享什么?数据?共享的处理规则是什么?)
2.Total ,总口数(口数?牲口??)
3.Id ,本次ID的值不会重复,递增1.,如果AllSame=0可能会重复,AllSame=1不会重复(什么意思?id是主键也会重复?还是处理相同的一条记录???)
4.AllSame(本次处理是否全部CardType是相同的(全部为1/2/0)),AllSame=0情况,NeedCardType=3需要拆分2个队列,分发到1或者3(allsame?哪儿来的?字段?程序参数?分发到1,3?分发规则是什么?随机?还有就是没有断句。)
后面的太多了太多了,后面的不要跟贴了,保证没人做出来!!!!
executemylove 2007-07-07
  • 打赏
  • 举报
回复
up吧
太长了。
playwarcraft 2007-07-07
  • 打赏
  • 举报
回复
去北京吃個飯,來回機票誰報啊?
w75251455 2007-07-06
  • 打赏
  • 举报
回复
昏迷中.....
mengmou 2007-07-06
  • 打赏
  • 举报
回复
我也看不明白楼主动的需求。
w75251455 2007-07-06
  • 打赏
  • 举报
回复
太多了。。。。。(唉~~手脚不好用了。。。)
w75251455 2007-07-06
  • 打赏
  • 举报
回复
汗。。。看多了~~没耐心看~!!!
mengmou 2007-07-06
  • 打赏
  • 举报
回复
砍破不是在北京么?上啊。也请楼下的不要跟首都的哥们争了,哈哈。
w75251455 2007-07-06
  • 打赏
  • 举报
回复
成功后,哥们请吃饭(如果是北京的朋友.)
------------------------------------
关注!!
ice241018 2007-07-06
  • 打赏
  • 举报
回复
up
zsforever 2007-07-06
  • 打赏
  • 举报
回复
begin tran tran1
select top(1000) * from CompanyOperation with(READPAST,xlock) where 1=1
waitfor delay '0:00:10'
commit tran tran1

我用这个在多个窗口里测试正常
junshanhudazhaxi 2007-07-06
  • 打赏
  • 举报
回复
顶下!
koenemy 2007-07-06
  • 打赏
  • 举报
回复
用数据库发短信嘛。。
这是程序的事吧。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧