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数据库的作业的脚本及存储过程?的主要内容,如果未能解决你的问题,请参考以下文章