通过条件计算创建函数

时间:2018-10-17 08:14:58

标签: sql-server tsql

我试图在RETURN语句之前创建一个带有条件计算的函数,但是SSMS指出'BEGIN IF @param2 IS NULL'附近有不正确的语法,我无法弄清楚这段代码有什么问题:

CREATE FUNCTION ConditionalFunction
(
    @input1 VARCHAR(20),
    @input2 VARCHAR(20)
)
RETURNS TABLE
AS BEGIN
    IF @input2 IS NULL
    BEGIN
        SET @input2 = field
        FROM table1
        WHERE filter = @input1
    END

    RETURN
    (
        SELECT field1, field2
        FROM table2
        WHERE filter1 = @input1
        AND filter2 = @input2
    )
END

我的目标是能够调用它

ConditionalFunction('Foo',NULL)

ConditionalFunction('Foo','Bar')

第一个调用将使它基于@input2检测@input1的默认值。

我基于this answer编写了此代码。
这是SQL Server13。能否请我告诉我是否有什么办法可以使其编译?


N.B:我显然用通用名称替换了实名,但是代码结构保持不变

1 个答案:

答案 0 :(得分:2)

尝试一下,但是将@Data表类型更改为您的数据类型:

CREATE FUNCTION ConditionalFunction
(
    @input1 VARCHAR(20),
    @input2 VARCHAR(20)
)
RETURNS @Data TABLE
(
    field1 VARCHAR(12)
   ,field2 VARCHAR(12)
)
AS 
BEGIN

    IF @input2 IS NULL
    BEGIN
        SET @input2 = field
        FROM table1
        WHERE filter = @input1
    END

    INSERT INTO @Data
    SELECT field1, field2
    FROM table2
    WHERE filter1 = @input1
    AND filter2 = @input2


    RETURN;
END

SQL中有几种类型的函数:

  • 标量仅返回一个值
  • 内联-返回一个表(就像带有参数的视图一样)
  • 表值-返回表

您的语法看起来像您需要一个内联函数,但应只包含一个返回数据的SELECT语句。因此,您需要创建一个表值函数。