SQL ЕСЛИ внутри функции - PullRequest
       229

SQL ЕСЛИ внутри функции

0 голосов
/ 07 августа 2020
ALTER FUNCTION [dbo].[FSmapping] (
    @runID as bigInt,
    @TypMap as char(1)
    )

RETURNS TABLE
AS
RETURN


IF (@TypMap ='C')
BEGIN
SELECT b.[A/C],g.accountNumber, b.[Process], g.[endingBalanceLC], g.beginningBalanceLC
FROM table1 g
LEFT JOIN  table2  b ON b.[Acc2]=g.Account_Synt
where RunID = @runID
END

Я пытаюсь реализовать табличную функцию в SQL. В основном у него должно быть еще 3 IF s, и единственное, что будет переключаться, это table2, из table2-4 на основе входов C IR S. Ошибка - это оператор IF, я знаю, что чего-то не хватает , Мне сложно реализовать какую-то функцию переключения с таблицей в качестве возвращаемого значения. Select работает безупречно без синтаксиса IF, он также сообщает об ошибках в двух переменных внутри IF

Необходимо объявить скалярную переменную runID и TypMap

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Вам необходимо изменить свой запрос как функцию с табличным значением с несколькими инструкциями, чтобы ваша функция выглядела так, как показано ниже:

CREATE OR ALTER FUNCTION [dbo].[FSmapping] (
    @runID as bigInt,
    @TypMap as char(1)
    )
RETURNS @Table1JoinTable2 
TABLE (
--table definition here 
Col1 VARCHAR(10)
)
AS
BEGIN
IF (@TypMap ='C')
BEGIN
INSERT INTO @Table1JoinTable2 
SELECT @TypMap
--Put select query SELECT b.[A/C],g.accountNumber, b.[Process], g.[endingBalanceLC], g.beginningBalanceLC
--FROM table1 g
--LEFT JOIN  table2  b ON b.[Acc2]=g.Account_Synt
--where RunID = @runID
END
IF (@TypMap ='I')
BEGIN
INSERT INTO @Table1JoinTable2 
SELECT @TypMap
--Put your select query
END
IF (@TypMap ='I')
BEGIN
INSERT INTO @Table1JoinTable2 
SELECT @TypMap
--Put your select query
END
IF (@TypMap ='R')
BEGIN
INSERT INTO @Table1JoinTable2 
SELECT @TypMap
--Put your select query
END
IF (@TypMap ='S')
BEGIN
INSERT INTO @Table1JoinTable2 
SELECT @TypMap
--Put your select query
END
RETURN
END
0 голосов
/ 07 августа 2020

Если TypMap не приходит C, что вернет функция?

я думаю, вам нужно 'ELSE'.

IF Boolean_expression
BEGIN
    -- Statement block executes when the Boolean expression is TRUE
END
ELSE
BEGIN
    -- Statement block executes when the Boolean expression is FALSE
END
...