SQL Server 存储过程在由 SQL Server 代理运行时似乎不起作用

问题描述 投票:0回答:2

我遇到一个问题,即我为处理某些数据而构建的存储过程在由 SQL Server 代理运行时似乎无法正常工作。如果我手动执行该作业,一切都会正常。我也没有收到任何错误。

基本过程是我有三个源表(A、B、C),每个源表用于不同类型的服务。它们用于计算一个值,由于每年的计算过程不同,所以有多个结果,所以ID B43会有result15和result16,分别对应2014/15和2015/16财政年度。最终结果存储在主表中,其中包含每条记录的 ID、类型以及两个结果值。

为了完成这项工作,我有六个按顺序运行的存储过程,首先用于 14/15 计算,然后用于 15/16 计算。

每个存储过程的一般结构是获取数据,根据一些映射表对其进行操作并创建一个 CalculationInput 表,该表仅用于检查计算中的输入以进行审计检查。完成此操作后,将进行实际计算,并将结果存储在临时表中

#Results
。构建临时表后,我创建一些索引,然后调用另一个存储过程,传入财务年度作为参数,该存储过程采用临时表并对主表执行插入更新。之后,存储过程结束,调用下一个存储过程。

StoredProcA15 -> InsUpdProc
StoredProcB15 -> InsUpdProc
StoredProcC15 -> InsUpdProc
StoredProcA16 -> InsUpdProc
StoredProcB16 -> InsUpdProc
StoredProcC16 -> InsUpdProc

正如我之前所说,如果我右键单击该作业并执行它,则效果非常好。但是,如果我等待一周并查看主表,则不会出现新记录,尽管它们位于源表以及 CalculationInput 表中。如果我随后运行构建临时表的代码部分,结果就会出现在那里。

所以我对失败根源的最佳猜测是对插入/更新过程的调用。在不了解有关 SQL Server 并发性的更多信息的情况下,我想知道父存储过程是否不等待插入/更新过程在结束之前完成并移至下一个存储过程。

有这种可能吗?如果是这样,解决它的最佳方法是什么?

sql-server t-sql stored-procedures concurrency
2个回答
0
投票

对我来说听起来像是配股。检查运行 Windows 服务“SQL Server Agent”的用户 ID。要排除故障,请将其更改为对您的数据库拥有权限的 Windows 登录名,并确保密码永不过期。

要做到这一点:

从控制面板 --> 管理工具 --> 服务 ---> SQL 代理 --> 右键单击 --> 属性 --> 登录选项卡 --> 此帐户 --> 您的 Windows id / pswd --> 单击确定保存

在一个有时间表的作业上尝试这个,要求它每 5 分钟运行一次(这样你就不必等待几天,哈哈)并执行一个虚拟 sp 并观察它是否通过调度程序执行几次。

从 Windows 注销,它应该仍会继续。

希望有帮助


0
投票

希望你能帮助我。我有相反的问题。当我尝试运行存储过程或简单的 SQL 语句来将数据批量插入表中时,收到错误消息“无法批量加载,因为无法打开文件“old\AAA.txt”。操作系统错误代码 5 (访问被拒绝。) 我可以删除一个表,我可以创建一个表,但是当我尝试批量插入时,我收到错误。然而,当我从 SQL Server 代理下运行相同的过程作为作业时 - 我没有任何问题。一切运行良好。一定是权限问题,但是在哪里?!非常感谢任何帮助。

© www.soinside.com 2019 - 2024. All rights reserved.