Sql server 具有多个if语句时的SQL过程行为

Sql server 具有多个if语句时的SQL过程行为,sql-server,if-statement,stored-procedures,Sql Server,If Statement,Stored Procedures,我有这样的存储过程 Create Procedure [dbo].[Get_Data]( @Id as Varchar(20), @Type as Varchar(10) ) As Begin IF(@Type = 'skill') Begin ..... select * .... END IF(@Type = 'agent') Begin ..... select * .... END IF(@Type = 'skillProfil

我有这样的存储过程

Create Procedure [dbo].[Get_Data](
@Id as Varchar(20),
@Type as Varchar(10)
)
As
Begin
  IF(@Type = 'skill')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'agent')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'skillProfile') 
  Begin 
    Print 'abc'
    select * ....
   .....
  END
END
注意:当成功测试每个循环中的每个
select
查询时,任何if循环中都没有语法或任何其他错误

现在,当我尝试使用下面的命令执行这个过程时

EXEC  [Get_Data] '1391520','skillProfile'
语句
print
未打印,也无法返回任何行,相反,我已成功完成消息
命令。

我尝试将最后一个(即这里是第三个)if循环语句,即从
if(@Type='skillProfile')
更改为
if(@Type='profile')
,并尝试像
EXEC[Get_Data]'1391520','profile'
那样执行,效果很好

对此感到困惑,并尝试将第一个if循环和最后一个(第三个)if循环更改为这样,
if(@Type='skill')
更改为
if(@Type='xyz')
if(@Type='skillProfile')
并尝试像
EXEC[Get_Data]'1391520'一样执行,“xyzProfile”
也可以正常工作


现在我完全搞不懂为什么我使用
skill
skillProfile
时它不起作用

您将参数定义为Varchar(10),这意味着它不能包含超过10个字符。如果您尝试为其分配更长的值,则会在没有警告的情况下截断它。因此,您正试图使用
@Type='skillProfi'
执行您的过程。解决方案是增加参数的大小,例如
varchar(100)

您将参数定义为varchar(10),这意味着它不能容纳超过10个字符。如果您尝试为其分配更长的值,则会在没有警告的情况下截断它。因此,您正试图使用
@Type='skillProfi'
执行您的过程。解决方案是增加参数的大小,比如说
varchar(100)

使用Try-catch-block,您将知道错误在哪里

Create Procedure [dbo].[Get_Data](
@Id as Varchar(20),
@Type as Varchar(10)
)
As
BEGIN TRY
    SET NOCOUNT ON
  IF(@Type = 'skill')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'agent')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'skillProfile') 
  Begin 
    Print 'abc'
    select * ....
   .....
 END TRY

BEGIN CATCH
    SELECT ERROR_NUMBER() AS ErrorNumber
     ,ERROR_SEVERITY() AS ErrorSeverity
     ,ERROR_STATE() AS ErrorState
     ,ERROR_PROCEDURE() AS ErrorProcedure
     ,ERROR_LINE() AS ErrorLine
     ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

使用Try-catch块,您将知道错误所在

Create Procedure [dbo].[Get_Data](
@Id as Varchar(20),
@Type as Varchar(10)
)
As
BEGIN TRY
    SET NOCOUNT ON
  IF(@Type = 'skill')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'agent')
  Begin 
   .....
   select * ....
  END

  IF(@Type = 'skillProfile') 
  Begin 
    Print 'abc'
    select * ....
   .....
 END TRY

BEGIN CATCH
    SELECT ERROR_NUMBER() AS ErrorNumber
     ,ERROR_SEVERITY() AS ErrorSeverity
     ,ERROR_STATE() AS ErrorState
     ,ERROR_PROCEDURE() AS ErrorProcedure
     ,ERROR_LINE() AS ErrorLine
     ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

哦,该死!是的,你是对的,我没注意到。非常感谢。哦,妈的!是的,你是对的,我没注意到。谢谢。