我需要在user defined function
中创建一个标量值SQL Server
。我需要with
子句来存储一些中间表,这些表将产生最终的返回结果。我还需要IF .. ELSE
,因为根据输入参数,对resutl的查询是不同的。但是,我无法编写代码而不会将这两个元素组合在一起。我的功能是这样的:
CREATE FUNCTION [dbo].[getMyValue](
@inputType int
)
RETURNS float
AS
BEGIN
DECLARE @result float
;
WITH tempTable AS
(
SELECT * from TableA
)
;
IF inputType = 1
set @result = select sum(t.result1) from tempTable
else
selecset @result = select sum(t.result2) from tempTable
return @result
END
GO
但现在它抱怨incorrect syntax near 'if'
。如果我删除with
子句(并查询某些实际表),它会编译,或者如果我删除IF
语句,它也会编译。那么我怎样才能让它们一起工作呢?
答案 0 :(得分:1)
您不能在SQL查询的上下文中使用IF
这样的内容。请尝试使用以下内容:
DECLARE @result float, @result1 float, @result2 float
WITH tempTable AS
(
SELECT * from TableA
)
SELECT @result1 = sum(case when @inputType = 1 then t.result1 else 0 end),
@result2 = sum(case when @inputType = 2 then t.result2 else 0 end)
FROM tempTable
IF @inputType = 1
SET @result = @result1
ELSE
SET @result = @result2
RETURN @result