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。听起来您真的想要一个带有输出参数或结果集的存储过程。
在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。听起来您真的想要一个带有输出参数或结果集的存储过程。