读一记录后删除

pclion 2010-10-18 05:06:44
需求描述:
多用户环境,每个用户每次读一个记录,如果满足条件,就删除之;如果不满足条件,就继续读下一记录,直到读到一条满足的记录为止,然后删除该记录。
一条记录,决不能被两个用户读取。

我考虑用游标实现,但是对数据库的锁定机制不熟悉,请问解决方法。
这个想用在评卷上,多名老师每个老师每次读一份卷,然后评卷,打分,然后读下一卷。
...全文
125 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2010-10-18
  • 打赏
  • 举报
回复
个人感觉需求有点不正常,应该是假删吧?
--小F-- 2010-10-18
  • 打赏
  • 举报
回复
建议不要用游标 海爷说的队列是很不错的 ,先进先出
billpu 2010-10-18
  • 打赏
  • 举报
回复
自己看书得来效果好 恭喜楼主开了个好头
pclion 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haiwer 的回复:]
这个概念,最契合的是队列,你可以查看下,找个合适的来使用,用数据库并不是最合适的。

MSMQ或者数据库里的Service Broker队列,用好了你的程序会很简单。
[/Quote]
感谢haiwer,在MSDN上看了一下server Broker,感觉很新鲜,一时也无法充份理解,一时也无法应用到设计里。学习.
这里面的概念还真不少:
消息队列
会话组
读取器,等等
lidanzi 2010-10-18
  • 打赏
  • 举报
回复
光“学习”是不够的
louisit 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
SQL code
游标的基本写法

declare @id int,@name varchar(20);
declare cur cursor fast_forward for
select id,name from a;
open cur;
fetch next from cur into @id,@name;
while @@fetch_status=0
begin
……
[/Quote]
学习
ChinaITOldMan 2010-10-18
  • 打赏
  • 举报
回复
learning,support
xBoady 2010-10-18
  • 打赏
  • 举报
回复
游标可以解决的。。
andyou179 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haiwer 的回复:]
这个概念,最契合的是队列,你可以查看下,找个合适的来使用,用数据库并不是最合适的。

MSMQ或者数据库里的Service Broker队列,用好了你的程序会很简单。
[/Quote]

学习
昵称被占用了 2010-10-18
  • 打赏
  • 举报
回复
这个概念,最契合的是队列,你可以查看下,找个合适的来使用,用数据库并不是最合适的。

MSMQ或者数据库里的Service Broker队列,用好了你的程序会很简单。
dawugui 2010-10-18
  • 打赏
  • 举报
回复
游标的基本写法

declare @id int,@name varchar(20);
declare cur cursor fast_forward for
select id,name from a;
open cur;
fetch next from cur into @id,@name;
while @@fetch_status=0
begin
--做你要做的事
fetch next from cur into @id,@name;
end
close cur;
deallocate cur;

1 如何锁一个表的某一行

A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除


综合上面两段内容,参考着写之.
pclion 2010-10-18
  • 打赏
  • 举报
回复
用游标担心有个问题,当游标滚到某一行时,这一行却已经被别的用户删除了。不知如何避免这样的问题。

34,588

社区成员

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

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