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
哦,该死!是的,你是对的,我没注意到。非常感谢。哦,妈的!是的,你是对的,我没注意到。谢谢。