SQL 提前退出标量函数

SQL Exit scalar function prematurely

在SQL中,您可以使用RETURN语句提前退出存储过程。

-- CHECK IF IT IS A VALID AND EXISTING JOB NAME
IF NOT EXISTS (SELECT * FROM msdb..sysjobs WHERE name = @job_name)
BEGIN
    RAISERROR ('[ERROR]:[%s] job does not exist. Please check',16, 1, @job_name) WITH LOG
    RETURN
END

但是,当我尝试将相同的原理应用于标量函数时,它 return 出现了错误,因为函数需要 return 某些东西。

CREATE FUNCTION [dbo].[fn_GetJobStatus]
    (@job_name SYSNAME)
RETURNS INT
WITH EXECUTE AS CALLER
AS
BEGIN
    DECLARE @JobCompletionStatus INT;

    -- CHECK IF IT IS A VALID AND EXISTING JOB NAME
    IF NOT EXISTS (SELECT * FROM msdb..sysjobs WHERE name = @job_name)
    BEGIN
        RAISERROR ('[ERROR]:[%s] job does not exist. Please check',16, 1, @job_name) WITH LOG
        RETURN   <--ERROR HERE
    END
    
    <!--Scalar function logic here -->

    RETURN @JobCompletionStatus;
END

如何像在存储过程中使用 RETURN 一样提前退出标量函数?

谢谢。

您也不能在函数中使用 RAISERROR 或 THROW。听起来您真的想要一个带有输出参数或结果集的存储过程。