插入后15秒自动更新SQL Server表中的字段

时间:2012-02-09 17:57:58

标签: sql-server-2008 sql-agent

我有点奇怪的情况,我正在努力填充表格中的字段。我还应该提一下我对SQL Server的新手。

正在使用的内容:我在SQL Server 2008数据库中工作。有两个值得关注的表格PO_APPROVAL_LOGPO_HDR

此处执行的流程是创建新的采购订单。在某些情况下,需要经理批准才能创建采购订单。我正在使用winform(C#)根据Active Directory对管理器进行身份验证,如果管理员是某个组的成员,则PO被批准。

我的情况:正在使用第三方应用程序,我正在编写一些验证代码(如上所述),它在应用程序中发生保存事件之前执行。如果满足某些条件,我的验证代码将返回TRUE并允许应用程序继续进行保存。启动保存后,会插入数据库中的一些表,包括PO_HDR。我无法更改事件发生的顺序,我只能编写这些验证规则。在从我的代码收回特定对象之前,该应用程序将不会继续,该代码的SUCCESS属性设置为TRUEFALSE

问题我遇到的是将PO审批记录到PO_APPROVAL_LOG表中。现在,当经理提交凭证时,会插入PO_APPROVAL_LOG表。这是在填充PO_HDR之前发生的。我需要包含PO_HDR.PO_NUMBER,为了做到这一点,我需要等到PO_HDR填充后,并获取PO_NUMBER值,并更新相应的PO_APPROVAL_LOG条目。很少有PO实际上需要批准,PO_APPROVAL_LOG表不应该看到很多动作。

我无法在PO_HDR表格上创建触发器。

为了实验,我在AFTER INSERT上创建PO_APPROVA_LOG触发器,使用waitfor delay查看是否可以在{{1}之后获取PO_NUMBER有机会填充。 (是的,我知道触发器中的PO_HDR是一个可怕的想法,它只是在游戏数据库中进行实验)。这不起作用,因为在插入和后续触发器执行完成之前,应用程序没有从waitfor delay的验证代码得到响应。

我的问题:SQL代理作业可以成为可能的解决方案吗?它需要每隔一两分钟运行一次。我担心的一个问题是,这会对数据库造成太大的负担吗?如果作业已运行并确定是否应调用过程来更新日志表(在TRUE中找到一个或多个NULL PO_NUMBER值),那么这可能会有效。

还有其他建议吗?这给我带来了一段时间的麻烦。

如果有任何不清楚的地方,请询问!谢谢!

2 个答案:

答案 0 :(得分:1)

在sql中无法做到这一点,尝试从代码中执行此操作。

答案 1 :(得分:0)

这将是一个有点圆的,可能不适合您的确切设置...

从PO_APPROVAL_LOG表收集数据时,请通过将此表连接到PO_HDR的视图或存储过程来执行此操作。检查PO_HDR是否已更新 - 如果没有,请不要返回PO_APPROVAL_LOG行。

使用此设置,您永远不会实际更新PO_APPROVAL_LOG表。 (奖金,IMO)