SQL Server用户定义函数一起使用WITH,IF

时间:2018-05-17 06:54:59

标签: sql-server user-defined-functions common-table-expression

我需要在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语句,它也会编译。那么我怎样才能让它们一起工作呢?

1 个答案:

答案 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