SQL SERVER数据库的作业的脚本及存储过程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER数据库的作业的脚本及存储过程?相关的知识,希望对你有一定的参考价值。

参考技术A 第一步:点击数据库下的“可编程性”,选择“存储过程”,点击鼠标右键,选择“新建存储过程”
第二步:在createPROCEDURE后输入存储过程的名字,紧跟着的就是定义存储过程的参数,接下来就可以去编写自己所需要组装的存储过程语句了
第三步:编译存储过程,在工具栏上按下执行按钮,如果没有错误,就编写成功了。
第四步:调用:在sqlserver的语句查询框中,输入exec存储过程名参数,执行就可以了。
基本语法格式如下:中括号带的是可选项
createproc|procedurepro_name
[@参数数据类型[=默认值][output],
@参数数据类型[=默认值][output],
....
]
as
begin
SQL_statements
--业务处理
end

如何从存储过程启用 SQL Server 代理作业执行

【中文标题】如何从存储过程启用 SQL Server 代理作业执行【英文标题】:How to enable SQL Server Agent job execution from stored procedure 【发布时间】:2019-04-05 13:37:34 【问题描述】:

我有一个执行.dtsx 包的代理作业。它需要从数据库用户拥有的存储过程中调用,并由应用程序使用并作为所有者执行。

授予

代码:

DECLARE @return_value INT

EXEC    @return_value = [dbo].[rscc_drop_off_caller]

SELECT  'Return Value' = @return_value

我给了用户SQLAgentUserRole 并确认它已在sp_start_job 上执行。

如果我跑:

DECLARE @ReturnCode INT;

EXEC @ReturnCode = msdb.dbo.sp_start_job N'RSCC Push CCD To AIM';

PRINT @ReturnCode;

从 SSMS 的一个窗口,它运行良好。

但如果我跑:

exec csisql.rscc_drop_off_caller; 

失败并出现错误:

消息 229,级别 14,状态 5,过程 sp_start_job,第 1 行 对象“sp_start_job”、数据库“msdb”、架构“dbo”的执行权限被拒绝。

“rscc_drop_off_caller”过程试图返回 NULL 状态,这是不允许的。将返回状态 0。

我什至在授予权限后尝试删除并重新创建存储过程,但我得到了同样的错误。存储过程非常简单:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[rscc_drop_off_caller]
WITH EXECUTE AS OWNER
AS
DECLARE @ReturnCode int;

BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_start_job N'RSCC Push CCD To AIM';
    RETURN (@ReturnCode); 
END

对不起,如果我提供了太多信息。我真的需要让这个工作,但我很难过。任何帮助将非常感激。提前致谢。

KT

总结一下:我需要能够从存储过程中调用代理作业。尽管以拥有用户的身份直接调用作业(执行...),但目前失败了。

【问题讨论】:

结果中的某处应该是一行,上面写着“以 SomeUserName 身份执行”。这说明了什么,当您收到权限错误时,该用户拥有什么权限? 您在哪个数据库中创建了您的过程,在 msdb 中还是在用户数据库中? @sepucic 存储过程在 csisql 数据库中,这是一个用户数据库。 @Tab Alleman 我假设您的意思是在存储过程中?存储的过程由 dbo 用户拥有,但我已修改该过程以作为“DAimConnUser”执行(我授予 exec sp_start_job 权限的同一用户)。我还尝试修改程序以作为 CALLER 执行。都没有用。 【参考方案1】:

感谢您的帮助。我解决了这个问题。我修改了 SP 以作为调用者执行,并授予该 DAimConnUser 执行存储过程的特定权限。

【讨论】:

以上是关于SQL SERVER数据库的作业的脚本及存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

sybase 如何像SQL SERVER一样建立作业,让他能定时运行存储过程

如何从存储过程启用 SQL Server 代理作业执行

sql server 存储过程如何调用存储过程

SQL SERVER 中如何用脚本管理作业

SQL SERVER 中如何用脚本管理作业

sqlserver存储过程如何定期删除表中的数据 求代码