SQL 服务器存储过程语法 return 从执行传递作业名称到 sp_stop_job retval
SQL Server stored procedure syntax to return retval from execute passing job name to sp_stop_job
我的 SQL 服务器体验很差,但是,必须维护一个旧的(非常旧的)SQL 服务器实例,我目前正在尝试编写一个复杂的存储过程,但它失败了(由于语法)当我尝试停止工作时。
所以,我现在正在努力寻找一个有效的语法来:
- 执行msdb.sp_stop.job
- 将我存储在@job_name变量中的工作名称传递给它
- 返回一个(声明的)@retval 变量以便稍后了解作业是否真的停止了。
我正在尝试一些语法变体(由于某种原因都失败了),我想我糟糕的经历需要帮助和提示。我也试图从其他一些默认程序中发现(比如 sp_help_job
)
这是我最后一次尝试:
GO
SET ANSI_WARNINGS ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE my_test_stop_job
-- Individual job parameters
@job_name sysname = NULL -- If provided should NOT also provide job_id
AS
BEGIN
DECLARE @retval INT
-- Remove any leading/trailing spaces from parameters (except @owner_login_name)
SELECT @job_name = LTRIM(RTRIM(@job_name))
-- Turn [nullable] empty string parameters into NULLs
IF (@job_name = N'') SELECT @job_name = NULL
IF (@job_name IS NOT NULL)
BEGIN
EXECUTE ('@retval = EXECUTE msdb.dbo.sp_stop_job @job_name = ''' + @job_name + '''')
IF (@retval <> 0)
RETURN(1) -- Failure
ELSE
RETURN(0) -- status OK
END
END
GO
使用
启动
EXEC mydb.dbo.my_test_stop_job @job_name = 'jobname2bestopped'
未能给予:
must declare the variable '@retval'
如何做到这一点?谢谢
不需要动态-SQL:
CREATE PROCEDURE my_test_stop_job
-- Individual job parameters
@job_name sysname = NULL
AS
BEGIN
DECLARE @retval INT;
-- Remove any leading/trailing spaces from parameters
SELECT @job_name = LTRIM(RTRIM(@job_name));
-- Turn [nullable] empty string parameters into NULLs
IF (@job_name = N'') SELECT @job_name = NULL;
IF (@job_name IS NOT NULL)
BEGIN
EXECUTE @retval = msdb.dbo.sp_stop_job @job_name = @job_name;
IF (@retval <> 0)
RETURN(1); -- Failure
ELSE
RETURN(0); -- status OK
END
END
GO
此外,我建议在作业名称为 NULL
时设置 THROW
异常,否则您的存储过程将以代码 0
.
退出
如果由于某种原因你需要动态-SQL,你可以使用 EXEC dbo.sp_executesql
和 OUTPUT
参数。
我的 SQL 服务器体验很差,但是,必须维护一个旧的(非常旧的)SQL 服务器实例,我目前正在尝试编写一个复杂的存储过程,但它失败了(由于语法)当我尝试停止工作时。
所以,我现在正在努力寻找一个有效的语法来:
- 执行msdb.sp_stop.job
- 将我存储在@job_name变量中的工作名称传递给它
- 返回一个(声明的)@retval 变量以便稍后了解作业是否真的停止了。
我正在尝试一些语法变体(由于某种原因都失败了),我想我糟糕的经历需要帮助和提示。我也试图从其他一些默认程序中发现(比如 sp_help_job
)
这是我最后一次尝试:
GO
SET ANSI_WARNINGS ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE my_test_stop_job
-- Individual job parameters
@job_name sysname = NULL -- If provided should NOT also provide job_id
AS
BEGIN
DECLARE @retval INT
-- Remove any leading/trailing spaces from parameters (except @owner_login_name)
SELECT @job_name = LTRIM(RTRIM(@job_name))
-- Turn [nullable] empty string parameters into NULLs
IF (@job_name = N'') SELECT @job_name = NULL
IF (@job_name IS NOT NULL)
BEGIN
EXECUTE ('@retval = EXECUTE msdb.dbo.sp_stop_job @job_name = ''' + @job_name + '''')
IF (@retval <> 0)
RETURN(1) -- Failure
ELSE
RETURN(0) -- status OK
END
END
GO
使用
启动EXEC mydb.dbo.my_test_stop_job @job_name = 'jobname2bestopped'
未能给予:
must declare the variable '@retval'
如何做到这一点?谢谢
不需要动态-SQL:
CREATE PROCEDURE my_test_stop_job
-- Individual job parameters
@job_name sysname = NULL
AS
BEGIN
DECLARE @retval INT;
-- Remove any leading/trailing spaces from parameters
SELECT @job_name = LTRIM(RTRIM(@job_name));
-- Turn [nullable] empty string parameters into NULLs
IF (@job_name = N'') SELECT @job_name = NULL;
IF (@job_name IS NOT NULL)
BEGIN
EXECUTE @retval = msdb.dbo.sp_stop_job @job_name = @job_name;
IF (@retval <> 0)
RETURN(1); -- Failure
ELSE
RETURN(0); -- status OK
END
END
GO
此外,我建议在作业名称为 NULL
时设置 THROW
异常,否则您的存储过程将以代码 0
.
如果由于某种原因你需要动态-SQL,你可以使用 EXEC dbo.sp_executesql
和 OUTPUT
参数。