高手帮忙看一下存储过程?

asq985 2009-06-01 05:17:34
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[test1]
as
declare @thisID as bigint
BEGIN TRANSACTION
SELECT top 1 @thisID=id FROM tab1 ROWLOCK WHERE flag=0
update tab1 set flag=1 where id=@thisID
select * from tab1 where id=@thisID
COMMIT TRANSACTION

多个客户端同时访问数据库,本意是让一条记录只被一个客户端读取,但有时还会出现一条记录同时被两个或多个客户端读取?

怎样改进呢?

谢谢!!
...全文
94 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmdream 2009-06-01
  • 打赏
  • 举报
回复
xue xi
asq985 2009-06-01
  • 打赏
  • 举报
回复
先谢谢,后散分
dj3688 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 perfectaction 的回复:]
SQL codeSELECT top 1 @thisID=id FROM tab1 with(xlock,pagLOCK) WHERE flag=0
[/Quote]

up~~
等不到来世 2009-06-01
  • 打赏
  • 举报
回复
SELECT top 1 @thisID=id FROM tab1 with(HOLDLOCK) WHERE flag=0 
SQL77 2009-06-01
  • 打赏
  • 举报
回复
学习!!!
ai_li7758521 2009-06-01
  • 打赏
  • 举报
回复
XLOCK 指定采用排他锁并保持到事务完成。排他锁(X 锁)可以防止并发事务对资源进行访问。使用排他锁(X 锁)时,任何其他事务都无法修改数据;仅在使用 NOLOCK 提示或未提交读隔离级别时才会进行读取操作。


claro 2009-06-01
  • 打赏
  • 举报
回复
帮顶
下班
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 perfectaction 的回复:]
SQL codeSELECT top 1 @thisID=id FROM tab1 with(xlock,pagLOCK) WHERE flag=0
[/Quote]
up
Zoezs 2009-06-01
  • 打赏
  • 举报
回复

SELECT top 1 @thisID=id FROM tab1 with(xlock,pagLOCK) WHERE flag=0
nzperfect 2009-06-01
  • 打赏
  • 举报
回复
SELECT top 1 @thisID=id FROM tab1 with(xlock,pagLOCK) WHERE flag=0 

34,838

社区成员

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

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