mssql服务器-关键字';其他';
我对ELSE函数有问题 这是我的密码: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 >
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;