2014-11-13 119 views
1

我的IF..ELSE块失败,在BEGIN。我可以理解我的表达式本质上不是布尔型的,但是导致这种失败的原因是什么?如果ELSE语法错误

IF (SUBSTRING(@PARIDIN,1,1) = 'P' 
BEGIN 
    SET @PARIDTEMP = SUBSTRING(LTRIM(RTRIM(@PARIDIN)),2,6)) 
END 
BEGIN 
    ELSE SET @PARIDTEMP = @PARIDIN 
END 
+1

所有帽子都很好玩!但是你现在应该**停止** - 这真的很难阅读,真的很烦人 - 它被认为** SHOUTING **在粗鲁和不受欢迎的人。请不要这样做。 –

回答

1

您未关闭正在评估的表达式。

变化

IF (SUBSTRING(@PARIDIN,1,1) = 'P' 

IF (SUBSTRING(@PARIDIN,1,1) = 'P') 
2

你在一个奇怪的地方:

IF SUBSTRING(@PARIDIN,1,1) = 'P' -- one at the beginning of this line. 
BEGIN 
    SET @PARIDTEMP = SUBSTRING(LTRIM(RTRIM(@PARIDIN)),2,6) -- one at the end of this line. 
END 
ELSE 
BEGIN 
    SET @PARIDTEMP = @PARIDIN 
END 
+0

由于@Sean Lange提及,我将'ELSE'移到了'BEGIN'和'END'块之外。 – ps2goat

0

以固定我的条件的其他人的建议,有一个额外的括号惊讶的没有人提到非常奇怪的BEGIN END块。他们没有意义,也不确定他们甚至会工作。由于你只有一个单独的声明,所以删除它们更有意义。

IF (SUBSTRING(@PARIDIN,1,1) = 'P') 
    SET @PARIDTEMP = SUBSTRING(LTRIM(RTRIM(@PARIDIN)),2,6)) 
ELSE 
    SET @PARIDTEMP = @PARIDIN 
+0

'BEGIN'和'END'并不陌生。他们在那里是有原因的。它们允许你在'IF'或'ELSE'块中执行多个语句。国际海事组织(IMO),最好是在其他人修改代码之前拥有这个构造,所以我们不会得到意想不到的结果(想想和'ELSE'块在没有有效的'IF'块之前会导致语法错误。看到错误放置的ELSE作为一个问题 – ps2goat

+0

我完全理解了这一点,我说明OP的方式很奇怪,其他的是在BEGIN里面,抱歉你误解我的评论更清楚 –

+0

谢谢肖恩,那的确非常有帮助 – Anthony