Sqlserver 查询锁占用问题

sqlserver 与mysql、oracle 不同 ,它查询会自动加上锁,当查询与新增、更新操作冲突时会发生死锁的情况,例如下图:

这时候可以加上 WITH(NOLOCK) 申明不占锁

参考语句:

 select  sum(xpsl) xpsl,sum(temp.sl) as xssl,sum(je) as xsje,sum(thje) as thje
        from (
            select count(Distinct  djbh) as xpsl,sum(sl) as sl,sum(je) as je,sum(thje) as thje
            from(
                select  a.djbh,a.sl as sl,0 je,0 thje
                from  ipos_qtlsdmx a  WITH(NOLOCK)  ,ipos_qtlsd  b WITH(NOLOCK) 
                where a.FMID=b.FMID and rq ='2023-02-22' and b.dm1='S001'
                union all
                select a.djbh,0 sl,a.je as je,case when a.sl < 0 then a.je else 0 end as thje
                from  ipos_qtlsdmx  a WITH(NOLOCK) ,ipos_qtlsd  b WITH(NOLOCK) 
                where a.FMID=b.FMID and rq ='2023-02-22' and b.dm1='S001'
           ) vo
        ) temp
   )

但是不占锁时候有个弊端,会造成脏数据或者数据不对应,所以WITH(NOLOCK) 用于只读的报表类的操作,当有先查询然后再更新或者插入这种事务性的操作的时候,就不可以使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值