Sql server 使用条件计算创建函数

Sql server 使用条件计算创建函数,sql-server,tsql,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 @input

我试图在
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)

在某种程度上,第一次调用将使它基于
@input1
检测
@input2
的默认值

我基于。
这是SQL Server 13。你能告诉我我能做些什么来编译它吗



注意:我显然用泛型替换了实名,但代码结构保持不变

试试这个,但将
@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
语句。因此,您需要创建一个表值函数。

尝试此操作,但将
@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
语句。因此,您需要创建一个表值函数