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声明。
答案 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。