用户定义函数中的控制流

时间:2018-05-28 21:39:16

标签: sql sql-server

我创造了这个功能:

CREATE FUNCTION F_Emp_NumEmp
(@NumDe NUMERIC(3))
RETURNS TABLE
AS
    RETURN (
        SELECT
            td.NumDe, NumEm, Nombre
        FROM
            TDepto td INNER JOIN Temple tem ON (td.NumDe = tem.NumDe)
        WHERE
            td.NumDe = @NumDe
    );

我遇到的问题是我没有找到任何方法在其中执行流控制,我没有找到任何参考。我的意思是,我试图做的是,在调用此函数时,如果引入的参数与任何值都不匹配,则会显示个性化消息。

1 个答案:

答案 0 :(得分:1)

与大多数编程语言一样,SQL Server函数也有预定义的签名(参数数量,参数类型,返回类型等)。

如果您想要一个决定流量控制的对象,那么您应该查看存储过程而不是函数。

你创建的函数是一个Inline Table valued function它根本不具备灵活性,你可以在内联表值函数内做什么,它总会返回一个表,只能有一个Select语句在Inline Table valued function等内部

如果您正在寻找更灵活的函数类型,那么可以查看Multi Statement Table valued Functions,在这些函数中,您可以在函数内部使用更复杂的逻辑,并且可以执行更多操作。但是,它仍然是一个函数并且Function Signature规则适用,因此该函数只能返回特定类型的对象,如果是Multi Statement Table valued Function,它将是一个表。

就像我之前提到的,如果你正在寻找对象的更多灵活性并试图控制该对象内的执行流程Stored Procedures是要走的路。根据传递的参数值,您可以调用不同的函数并执行不同的操作等。