SQL Server 存储过程if else细节

写一个简单的存储过程,简单的逻辑,简单的语句,如下

IF @TYPE = '1' BEGIN组

。。。(查询语句)

END

IF @TYPE = '2' 
BEGIN
。。。(查询语句)
END

ELSE BEGIN 
。。。(查询语句)
END

简单语句用mybatis调用该存储函数,type传值为‘1‘时报空指针错误,提示我参数设置错误

懵逼的检查着我的Mapper、dao、service,没有问题,但是传值‘1’就是不可以!就是报错!

好吧,我直接数据库运行这个存储函数,传值‘1’,崩溃的是,数据能完美的、顺顺利利的出来!

我X,这是什么鬼,然后懵逼的换了下各个if下面的语句,好吧,只要是‘1‘就是有问题~

查了度娘还以为是什么返回值的问题,但是我把原来1的位置的SQL放到其他下面还是可以出来的啊!

最后我重新排查了下语句,第二个if前面没else,但是从java的逻辑来说这样也可以吧,不过这是存储过程的话那还是把他加上吧!

IF @TYPE = '1' BEGIN组

。。。(查询语句)

END

ELSE IF @TYPE = '2' 
BEGIN
。。。(查询语句)
END

ELSE BEGIN 
。。。(查询语句)
END

然后,然后,然后他就好了。。。花了我两个小时排查的问题。。。他就好了,虽然很开心,但是很崩溃!!!!!

好的,就这样了,我去哭会儿

参考

1.案例1:

sql 存储过程里的if else while

2.案例2

create procedure [dbo].[selectdianlaoempname]
(
     @date  nvarchar(250) , --插入的日期
     @flag  nvarchar(250) --判定插入的数据
)
AS
begin
declare @SignStatus nvarchar(250) ;--状态
end
if @date='实测'
   begin
   if @flag='1' or @flag='人员'
   set @SignStatus='1'
   end
else if @date='检验人'
   begin
   if @flag='1' or @flag='人员'
   set @SignStatus='2'
   end  
else if @date='IPQC确认' 
   begin
   if @flag='1' or @flag='人员'
   set @SignStatus='3'
   end 
   select @SignStatus as returnvalue

你可能感兴趣的:(数据库-SQLSERVRT,sql)