• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

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

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

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

怎样改进呢?

谢谢!!
...全文
70 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2009-06-01 05:17
社区公告
暂无公告