mssql服务器-关键字';其他';

mssql服务器-关键字';其他';,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我对ELSE函数有问题 这是我的密码: DECLARE @a AS int = 2; DECLARE @b AS int = 4; DECLARE @c AS int = 1; DECLARE @delta AS int; DECLARE @x0 AS int; DECLARE @x1 AS int; DECLARE @x2 AS int; BEGIN SET @delta = POWER(@b, 2) - 4 * @a * @c IF @delta >

我对ELSE函数有问题

这是我的密码:

DECLARE @a AS int = 2;
DECLARE @b AS int = 4;
DECLARE @c AS int = 1;
DECLARE @delta AS int;
DECLARE @x0 AS int;
DECLARE @x1 AS int;
DECLARE @x2 AS int;

BEGIN
    SET @delta = POWER(@b, 2) - 4 * @a * @c
            IF @delta > 0
                SET @x1 = -@b - SQRT(@delta) / 2 * @a
                SET @x2 = -@b + SQRT(@delta) / 2 * @a
                PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x1: ' + CAST(@x1 AS varchar) + 'x2: ' + CAST(@x2 AS varchar);
            ELSE IF @delta = 0
                SET @x0 = -@b / 2 * @a
                PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x0: ' + CAST(@x0 AS varchar);
            ELSE
END
我得到的错误:

Msg 156,级别15,状态1,第15行关键字附近语法不正确 “其他”

消息156,级别15,状态1,第18行关键字附近语法不正确 “其他”


不能有空的
ELSE
,如果有多条语句,则需要使用
BEGIN
/
END

IF @delta > 0
    BEGIN
        SET @x1 = -@b - SQRT(@delta) / 2 * @a
        SET @x2 = -@b + SQRT(@delta) / 2 * @a
        PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x1: ' + CAST(@x1 AS varchar) + 'x2: ' + CAST(@x2 AS varchar);
    END
ELSE IF @delta = 0
    BEGIN
        SET @x0 = -@b / 2 * @a
        PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x0: ' + CAST(@x0 AS varchar);
    END

我认为您需要的语法是:

DECLARE @a AS int = 2;
DECLARE @b AS int = 4;
DECLARE @c AS int = 1;
DECLARE @delta AS int;
DECLARE @x0 AS int;
DECLARE @x1 AS int;
DECLARE @x2 AS int;


SET @delta = POWER(@b, 2) - 4 * @a * @c;
IF @delta > 0
BEGIN
    SET @x1 = -@b - SQRT(@delta) / 2 * @a;
    SET @x2 = -@b + SQRT(@delta) / 2 * @a;
    PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x1: ' + CAST(@x1 AS varchar) + 'x2: ' + CAST(@x2 AS varchar);
END
ELSE IF @delta = 0
BEGIN
    SET @x0 = -@b / 2 * @a;
    PRINT 'Delta equals: ' + CAST(@delta AS varchar) + 'x0: ' + CAST(@x0 AS varchar);
END
理由:

  • 需要删除尾随的
    ELSE

  • 包含多条指令的块需要
    BEGIN
    END

  • 周围的
    开始/结束
    是不必要的


    • 您显然有一个悬空的
      ELSE
      子句,并且缺少
      开始
      /
      结束

      但是,我想提醒您不要在SQL Server中使用没有长度的
      varchar
      (或任何字符串声明)。长度因上下文而异,忽略长度通常是一个等待发生的错误

      最简单的解决方案是使用
      CONCAT()


      CONCAT()
      自动将值转换为字符串以进行串联。

      应在
      ELSE
      后面添加语句。这看起来很明显。您还需要再使用一点
      BEGIN
      END
      IF
      ELSE
      语句仅影响紧接其后的语句,除非使用
      BEGIN。。。结束
      块,例如:
      如果。。。开始结束,否则开始。。。结束
      BEGIN
          SET @delta = POWER(@b, 2) - 4 * @a * @c;
          IF @delta > 0
          BEGIN
              SET @x1 = -@b - SQRT(@delta) / 2 * @a;
              SET @x2 = -@b + SQRT(@delta) / 2 * @a;
              PRINT CONCAT('Delta equals: ', @delta, 'x1: ', @x1, 'x2: ', @x2);
          END;
          ELSE IF @delta = 0
          BEGIN
              SET @x0 = -@b / 2 * @a;
              PRINT CONCAT('Delta equals: ', @delta, 'x0: ', @x0);
          END;
      END;