sql - 在应用程序的数据库存储过程中使用 MSDB 存储过程

标签 sql sql-server sql-server-2008-r2

这似乎是微不足道的,但我一直无法想出解决这个小问题的方法。

我正在尝试在应用程序的数据库中创建存储过程。此存储过程仅执行在同一服务器上的 SSMS 中设置的作业(似乎是以编程方式执行这些作业的唯一方法)。

简单代码如下:

USE ApplicationsDatabase
GO
CREATE PROCEDURE [dbo].[procedure]
AS
BEGIN
    EXEC dbo.sp_start_job N'Nightly Download'
END

按原样运行时,该过程在技术上已创建,但无法执行,因为它使用应用程序数据库而无法找到“sp_start_job”。如果我尝试再次创建该过程(在删除以前创建的之后),但将 USE 更新为 MSDB,它会尝试将其添加到我无权执行的系统数据库中。最后,我尝试保留原来的 create 语句,但在过程中添加了 USE MSDB(只是为了使用“sp_start_job”过程),但会出错,提示 USE 语句不能放置在过程中。

在对这个问题进行了一番思考之后(我显然不是 SQL 数据库专家),我无法想出解决方案,并决定征求同行的建议。任何帮助将不胜感激,谢谢!

最佳答案

您必须完全限定该过程的路径。当然,只有应用程序有权限才能执行此操作。

试试这个:

USE ApplicationsDatabase
GO
CREATE PROCEDURE [dbo].[procedure]
AS
BEGIN
    EXEC msdb.dbo.sp_start_job N'Nightly Download'
END

关于sql - 在应用程序的数据库存储过程中使用 MSDB 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514463/

相关文章:

sql-server - SQL 服务器 : don't send email if transaction rolls back

sql - 用数组“插入”

unit-testing - SQL Server 单元测试执行顺序

sql-server - SQL 服务器 2008 R2 : Remove single occurrence record.

sql-server - T-SQL 中的位翻转操作

sql - 如何在 'invoke-SQLcmd' 语句中使用 PowerShell 的 'if' 的结果?

sql - 数据库表中有主键真的有必要吗?

mysql - 基于列中标志的 SQL View

sql-server - 如何在 SQL Server 2012 中获取最后插入的 ID

sql - 在 Postgresql 的 where 子句中使用别名列