Пользовательская функция SQL Server, использующая WITH, IF вместе - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно создать скалярное user defined function в SQL Server.Мне нужно иметь предложение with для хранения некоторых промежуточных таблиц, которые приведут к окончательному возвращаемому результату.Мне также нужно IF .. ELSE, потому что в зависимости от входного параметра запрос к результату различен.Однако я не могу написать код без ошибок, комбинируя эти два элемента вместе.Моя функция была бы такой:

             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 голосов
/ 17 мая 2018

Вы не можете использовать IF как этот в контексте запроса SQL. Попробуйте вместо этого использовать следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...