在实际生活中,有时希望触发某个sql作业,那如何用存储过程来完成呢?
-- =============================================
-- Author: yenange
-- Create date: 2024-01-31
-- Description: 执行某个Sql作业
-- =============================================
CREATE PROCEDURE Proc_Util_ExecJob
@jobName nvarchar(128)
AS
BEGIN
SET NOCOUNT ON;
/*
--为账号添加权限,替换下 YourAccount 对应的实际账号
USE [msdb]
GO
CREATE USER YourAccount FOR LOGIN YourAccount
GO
USE [msdb]
GO
ALTER ROLE [db_owner] ADD MEMBER YourAccount
GO
-- 给定账号添加作业执行权限
USE msdb;
GRANT EXECUTE ON dbo.sp_start_job TO YourAccount;
go
-- 给定账号添加对 msdb 数据库的执行权限
USE msdb;
GRANT EXECUTE TO YourAccount;
go
USE [msdb]
GO
ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [YourAccount]
GO
*/
-- 在存储过程中触发作业执行
EXEC msdb.dbo.sp_start_job @job_name = @jobName;
END
GO
exec Proc_Util_ExecJob 'TestJob'
如果希望在C#中执行某个作业,可以使用如下代码:
实测:本地没有问题,远程很难调试成功。把角色调整成为sysadmin了都没办法直接执行,暂时不纠结了,如果有试验成功的大神可以贴出来一起研究。
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
class Program
{
static void Main()
{
// 连接到 SQL Server 实例
ServerConnection serverConnection = new ServerConnection("your_server_name");
Server server = new Server(serverConnection);
// 获取作业
Job job = server.JobServer.Jobs["your_job_name"];
// 执行作业
job.Start();
}
}