получить возвращаемое значение как -1 из хранимой процедуры - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь увидеть, может ли моя хранимая процедура вернуть -1 некоторые значения, основанные на условии if, отснятый хранимый процесс выглядит следующим образом.

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 с возвращаемым значением.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...