Sql server 在sql函数中使用if语句
我有这样的代码Sql server 在sql函数中使用if语句,sql-server,Sql Server,我有这样的代码 create function factfind(@num integer) returns integer as begin if (@num=1) then return 1; else return(@num*factfind(@num-1)); end if; end 错误是,, Msg 156,第15级,状态1,程序factfind,第5行 关键字“then”附近的语法不正确。 Msg 156,第15级,状态1,程序factfind,第7行 关键字“else”
create function factfind(@num integer)
returns integer
as
begin
if (@num=1) then
return 1;
else
return(@num*factfind(@num-1));
end if;
end
错误是,,
Msg 156,第15级,状态1,程序factfind,第5行
关键字“then”附近的语法不正确。
Msg 156,第15级,状态1,程序factfind,第7行
关键字“else”附近的语法不正确。
Msg 195,第15级,第10状态,程序factfind,第8行
“factfind”不是可识别的内置函数名
请帮助我的朋友。执行以下操作:
CREATE FUNCTION dbo.fakultät(@n DECIMAL(38,0))
RETURNS DECIMAL(38,0)
AS
BEGIN
DECLARE @tmp DECIMAL(38,0)
IF (@n <= 1)
SELECT @tmp = 1
ELSE
SELECT @tmp = @n * dbo.fakultät(@n - 1)
RETURN @tmp
END
创建函数dbo.fakultät(@n十进制(38,0))
返回十进制(38,0)
作为
开始
声明@tmp十进制数(38,0)
如果(@n
Edit:需要是dbo.factfind
,因为标量UDF必须是模式限定的问题部分在于TSQL中if语句的语法,正确的做法是:
create function factfind(@num integer)
returns integer
as
begin
declare @Result int
set @Result = 1
if (@num>1)
set @Result = @num * dbo.factfind(@num-1);
return @Result
end
由于返回两次,您不应该在其中包含一个ELSE
?函数应该返回一个十进制(38.0),因为结果非常大,不能包含在12的整数中!CASE语句不需要“END”吗?
...
begin
return ( CASE
WHEN @num=1 THEN 1
ELSE @num * dbo.factfind(@num-1)
END
);
end
create function factfind(@num integer)
returns integer
as
begin
declare @Result int
set @Result = 1
if (@num>1)
set @Result = @num * dbo.factfind(@num-1);
return @Result
end