当我使用正确的参数运行下面的过程以便-1值不被返回时,我的DML语句都不会触发。我猜它是将我所有的DML语句作为ELSE块的一部分。
Server 2014
如果-否则-如果阻塞,我该如何结束?
ALTER PROCEDURE [GenerateNumber] (
@Code VARCHAR(2)
)
AS
BEGIN
DECLARE @stringConcat VARCHAR = 'X';
IF @Code = 'KP'
SET @stringConcat += 'Y';
ELSE IF @Code = 'RL'
SET @stringConcat += 'Z';
ElSE
-- Return error code and stop processing
SELECT -1;
RETURN;
BEGIN TRY
-- Various DML statements...
SELECT @successValue;
RETURN;
END TRY
BEGIN CATCH
SELECT -1;
RETURN;
END CATCH
END发布于 2015-09-16 17:25:22
好的,您必须在Begin语句中使用Else和End,因为它包含多行代码。
IF @Code = 'KP'
SET @stringConcat += 'Y';
ELSE IF @Code = 'RL'
SET @stringConcat += 'Z';
ElSE
Begin
-- Return error code and stop processing
SELECT -1;
RETURN;
End发布于 2015-09-16 17:27:32
你的缩痕是在骗你。
IF @Code = 'KP'
SET @stringConcat += 'Y';
ELSE IF @Code = 'RL'
SET @stringConcat += 'Z';
ElSE
-- Return error code and stop processing
SELECT -1; -- THIS is evaluated as the ELSE
RETURN; -- THIS is run regardless.只有最后一行之后的第一行才会作为一个附加条件来执行。无论如何,返回都将运行。你的开始尝试无法到达。
试试这个:
IF @Code = 'KP'
SET @stringConcat += 'Y';
ELSE IF @Code = 'RL'
SET @stringConcat += 'Z';
ElSE
BEGIN
-- Return error code and stop processing
SELECT -1;
RETURN;
END发布于 2015-09-16 17:25:37
如果希望SELECT -1和RETURN同时位于ELSE中,则必须使用BEGIN / END块。现在只有SELECT -1在其他分支中。
所以你需要
ELSE
BEGIN
SELECT -1;
RETURN;
ENDhttps://stackoverflow.com/questions/32614843
复制相似问题