在T-SQL中使用IF ELSE语法

时间:2016-04-08 20:32:50

标签: sql tsql

CREATE FUNCTION dbo.abz(@number1 INT)
RETURNS INT
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN 
IF @number1 < 0 
    BEGIN 
    RETURN -1 * @number1
    END
IF @number1 = 0
    BEGIN --line21
    RETURN 0
    END
IF @number1 > 0
    BEGIN
    RETURN @number1
    END
END

运行此代码时出现此错误:

  

消息156,级别15,状态1,服务器DB,过程abz,第21行   关键字“IF”附近的语法不正确。

为什么呢?那条线上甚至没有IF声明。

2 个答案:

答案 0 :(得分:4)

SQL Server函数只能有一个RETURN语句,它应该是函数的最后一个语句。你可以使用虚拟变量来做到这一点。此外,行号从最后GO语句或脚本开头计算,包括空行。因此,根据SQL Server的第21行可能不是编辑器中的第21行。

CREATE FUNCTION dbo.abz(@number1 INT)
RETURNS INT
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN 
DECLARE @ret INT

IF @number1 < 0 
    BEGIN 
        SET @ret = -1 * @number1
    END
IF @number1 = 0
    BEGIN --line21
        SET @ret = 0
    END
IF @number1 > 0
    BEGIN
        SET @ret = @number1
    END
RETURN @ret
END

答案 1 :(得分:0)

您应该使用ABS()而不是此功能。它完全一样。但是,为了向您展示为了不会出现错误而需要执行的操作,我将使用重写函数来删除错误:

CREATE FUNCTION dbo.abz(@number1 INT)
RETURNS INT
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN 
IF @number1 < 0 
    BEGIN 
   set @number1 =  -1 * @number1
    END


Return   @number1 


END

注意我删除了最后两个if语句,因为它们返回与输入变量相同的值。但是你的函数失败的真正原因是函数的最后一个语句必须是return,你不能在if语句中使用return。