首页 > 数据库 >SQL Server -- 解决存储过程传入参数作为sql语句条件值时,执行阻塞问题

SQL Server -- 解决存储过程传入参数作为sql语句条件值时,执行阻塞问题

时间:2022-09-18 15:55:59浏览次数:79  
标签:值时 product -- sql tbl4 cost tbl3 tbl1 id

成本核算程序执行某个存储过程一直阻塞,排查发现类似以下语句阻塞:

select 
    tbl1.product_id,sum(isnull(tbl1.qty,0) * isnull(tbl2.unit_other_cost,0)) as other_cost
from tbl1.p_id=@pId and tbl1.if_stock=0
    and exists(select 1 from tbl3 inner join tbl4 on tbl3.c1=tbl4.c2 where tbl4.c3=0 and tbl3.p_id=tbl1.p_id and tbl3.product_id=tbl1.product_id)
group by tbl1.product_id

其中参数@pId是存储过程的传入参数。测试发现将条件中的@pId改成具体的值,直接执行SQL语句也会阻塞,但是加上变量定义就不会了:

declare @newpId int
set @newpId=99
select 
    tbl1.product_id,sum(isnull(tbl1.qty,0) * isnull(tbl2.unit_other_cost,0)) as other_cost
from tbl1.p_id=@newpId and tbl1.if_stock=0
    and exists(select 1 from tbl3 inner join tbl4 on tbl3.c1=tbl4.c2 where tbl4.c3=0 and tbl3.p_id=tbl1.p_id and tbl3.product_id=tbl1.product_id)
group by tbl1.product_id

最终决定存储过程里重新定义个变量,赋值为传入参数,将重新定义的变量作为条件值,问题解决。

declare @newpId int
set @newpId=@pId
select 
    tbl1.product_id,sum(isnull(tbl1.qty,0) * isnull(tbl2.unit_other_cost,0)) as other_cost
from tbl1.p_id=@newpId and tbl1.if_stock=0
    and exists(select 1 from tbl3 inner join tbl4 on tbl3.c1=tbl4.c2 where tbl4.c3=0 and tbl3.p_id=tbl1.p_id and tbl3.product_id=tbl1.product_id)
group by tbl1.product_id

同样的程序、存储过程其它工厂核算时没有问题,即其它数据库没有出现阻塞,只在这个数据库阻塞,可能跟数据库设置有关,原理需要再研究。

 

标签:值时,product,--,sql,tbl4,cost,tbl3,tbl1,id
From: https://www.cnblogs.com/han-zhonggong/p/16696517.html

相关文章

  • Java问题之超过数值表示范围(例如64位)结果是什么 (阶乘)
    关于老师在课上所提及的这个问题我做了验证截图如下  只是一个简单的计算阶乘的代码在运行时得到了如下结果   可以看到,对于部分数字如果超出范围会从64......
  • C# DataGridView防止闪烁的方法
    启用dataGridView的双缓冲即可解决,方法如下:Typetype=dataGridView.GetType();PropertyInfopi=type.GetProperty("DoubleBuffered",......
  • 解方程
    解方程给定一个非负整数$a$,请你计算方程$a−(a\oplusx)−x=0$的非负整数解的数量。其中$\oplus$指按位异或。输入格式第一行包含整数$T$,表示共有$T$组测试数......
  • 编译原理:python编译器--运行时机制
    python的运行时机制的核心--python对象机制的设计理解字节码的执行过程用GDB跟踪执行一个简单的示例程序,它只有一行:“a=1”。对应的字节码如下。其中,前两行指令实现......
  • 常量
     常量在定义后不可被修改==============================================================================================  inta=0213//表示八进制的......
  • 可能是废话最多的 FFT 教程
    这是某不知名博主颓废之余的作品,篇幅可能很长,主要是力争自己以后忘了还可以看懂,也能引导其他读者(虽然可能没人看)不费脑子地看完(?)引入多项式是初中数学就接触的概念了,比如......
  • 多项式求逆&多项式 ln 保姆级教程
    话说原理八月初就会了,拖到现在才把代码写出来,是不是颓废之王?前置知识:多项式乘法(FFT/NTT)(参考阅读:可能是废话最多的FFT教程)一步一步推式子我们设$F(x)G(x)\equiv1\pmo......
  • 二--4.文法的实用限制和其他表示方法
    1.文法的实用限制2.产生式的消除  3.文法的其他表示方法 ......
  • 周期性定时任务
    周期性定时任务一、业务场景Web项目开发中少不了需要使用定时任务来处理一些工作,比如定时更改某些数据的状态,定时进行统计操作等等。自己以前参与开发过的一些系统......
  • 2022.9.17 Java第二次课总结
    以下是本节课后的问题首先是关于静态变量在类中,使用static修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称......