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



我有一个问题,我建立了一个存储过程来处理一些数据似乎不能正常工作时,由SQL Server代理运行。如果我手动执行工作,一切都很好。我也没有得到错误。

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

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

每个存储过程的一般结构是获取数据,根据一些映射表对其进行操作,并创建一个CalculationInput表,该表只是用来检查计算中的输入,以便进行审计检查。这样做之后,实际的计算就开始了,结果存储在一个临时表#Results中。在构建临时表之后,我创建了一些索引,然后调用另一个存储过程,将财政年度作为参数传入,该过程接受临时表并对主表进行插入更新。之后,存储过程结束,并调用下一个存储过程。

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

正如我之前所说的,如果我右键单击任务并执行它,这将非常好地工作。但是,如果我等待一周并查看主表,则不会有新记录,尽管它们存在于源表和CalculationInput表中。如果我接着运行构建临时表的代码段,结果就会出现在那里。

因此,我对失败根源的最佳猜测是对插入/更新过程的调用。在不了解SQL Server并发性的情况下,我想知道父存储过程是否没有等待插入/更新过程完成,然后才结束并移动到下一个存储过程。

这有可能吗?如果是这样,最好的解决办法是什么?

听起来像是配股。检查Windows服务"SQL Server代理"正在运行的用户Id。要排除故障,请将其更改为对数据库具有权限的windows登录名,并确保密码永远不会过期。

设置:

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

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

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

希望有帮助

最新更新