在事务中可用select语句吗,会不会出现死锁?

glassy2000 2011-11-01 10:40:29
begin transaction
begin try
declare @total_q

--统计PO收货情况
select @total_q=sum(total_q) from tb_grn where pono=@pono

--如果没有收货,则可删PO
if @total_q=0
begin
delete tb_pono_hdr where pono=@pono
delete tb_pono_det where pono=@pono

set @execute=1
end
else
begin
set @execute=0
end

commit transaction
end try
begin catch
set @execute=0
rollback tran
end catch
...全文
457 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-01
  • 打赏
  • 举报
回复
沒有問題,最好在select 加上 with(rowlock,holdlock)

這就是說,這個事務在操作,其它調用這個事務的不能操作這條記錄
--小F-- 2011-11-01
  • 打赏
  • 举报
回复
SELECT的时候 会申请一个共享锁 。而UPDATE的时候申请一个排他锁

SELECT的时候应该不会导致死锁。
--小F-- 2011-11-01
  • 打赏
  • 举报
回复
事务中当然可以用 SELECT语句
-晴天 2011-11-01
  • 打赏
  • 举报
回复
你这个delete语句直接写成一句就行了,用不着先前去查询的.
-晴天 2011-11-01
  • 打赏
  • 举报
回复
select 语句并不对表进行更新,设置事务有什么意义呢?
decher 2011-11-01
  • 打赏
  • 举报
回复
select * from xxxx (nolock) 查詢的時候加上nolock就不會碰到死鎖,不過會讀到脏數據
  • 打赏
  • 举报
回复
[Quote=引用楼主 glassy2000 的回复:]
begin transaction
begin try
declare @total_q

--统计PO收货情况
select @total_q=sum(total_q) from tb_grn where pono=@pono

--如果没有收货,则可删PO
if @total_q=0
begin
delete tb_pono_hdr where pono=@pono
de……
[/Quote]

搂住可能把问题想复杂了
pengxuan 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 roy_88 的回复:]
沒有問題,最好在select 加上 with(rowlock,holdlock)

這就是說,這個事務在操作,其它調用這個事務的不能操作這條記錄
[/Quote]
学习
gogodiy 2011-11-01
  • 打赏
  • 举报
回复
select @total_q=sum(total_q) from tb_grn where pono=@pono
单看这条语句,并不一定@total_q=0就说明没有数据吧,如果正好正负数相加为0呢?
其实正如晴天1,2楼说的,直接DELETE了,没必要先SELECT。

34,588

社区成员

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

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