从存储过程中获取返回值为-1

时间:2019-09-19 15:25:15

标签: sql-server

我试图查看我的存储过程是否可以基于if条件返回-1一些值,因此,存储过程如下。

CREATE PROCEDURE [StateMachine].[UpdateSnapshots] 


(@SystemName [nvarchar](128)= 'test_system',
@IntrestingEvents VARCHAR(128)='test_event',
@StateMachine_JSON [nvarchar] (max) = 'test_json',
@StateMachine_Object [nvarchar] (max)='test_object',
@CrossbarRouter VARCHAR(128) = 'text_xbar1') AS

BEGIN

DECLARE

@SystemNameValue [nvarchar](128),
@CrossbarValue [nvarchar](128),
@IsCrossbarNotNull int,
@IsCrossbarNull int,
@CrossbarLock int

select @SystemNameValue=count(systemname) from [StateMachine].[Snapshots] with (nolock) where SystemName=@SystemName



IF @SystemNameValue=0
BEGIN 
INSERT INTO [StateMachine].[Snapshots] (SystemName, IntrestingEvents, StateMachine_JSON, StateMachine_Object, CrossbarRouter) VALUES (@SystemName, @IntrestingEvents, @StateMachine_JSON, @StateMachine_Object, @CrossbarRouter)
END

select @CrossbarValue = isnull(count(CrossbarRouter),0) from [StateMachine].[Snapshots] with (nolock) where (CrossbarRouter=@CrossbarRouter and SystemName = @SystemName) 
select @IsCrossbarNotNull = isnull(count(CrossbarRouter),0) from [StateMachine].[Snapshots] with (nolock) where CrossbarRouter is not null and SystemName = @SystemName
select @IsCrossbarNull = isnull(count(CrossbarRouter),0) from [StateMachine].[Snapshots] with (nolock) where CrossbarRouter is null and SystemName = @SystemName
select @CrossbarLock = isnull(count(CrossbarRouter),0) from [StateMachine].[Snapshots] with (nolock) where (CrossbarRouter != @CrossbarRouter and SystemName = @SystemName) 

IF @CrossbarLock = 1
    RETURN -1



IF (@CrossbarValue = 0 and @IsCrossbarNotNull = 0) OR @IsCrossbarNull = 0
BEGIN
UPDATE [StateMachine].[Snapshots] SET IntrestingEvents=@IntrestingEvents, StateMachine_JSON=@StateMachine_JSON, StateMachine_Object=@StateMachine_Object, CrossbarRouter = @CrossbarRouter WHERE SystemName=@SystemName;
END
IF @CrossbarValue = 1 
BEGIN
UPDATE [StateMachine].[Snapshots] SET IntrestingEvents=@IntrestingEvents, StateMachine_JSON=@StateMachine_JSON, StateMachine_Object=@StateMachine_Object WHERE SystemName=@SystemName and CrossbarRouter=@CrossbarRouter;
END
END

GO
GRANT EXECUTE ON [StateMachine].[UpdateSnapshots] TO sp_executor

如果我尝试执行此操作,则会收到以下错误消息,

  

在这种情况下,不能使用带有返回值的RETURN语句。

谢谢

0 个答案:

没有答案