【发布时间】:2012-02-09 17:57:58
【问题描述】:
我遇到了一些奇怪的情况,我在努力填充表格中的字段。我还应该提到我对 SQL Server 还是很陌生。
正在使用什么:我正在使用 SQL Server 2008 数据库。有两个值得关注的表,PO_APPROVAL_LOG 和 PO_HDR。
这里执行的过程是创建一个新的采购订单。在某些情况下,创建采购订单需要经理批准。我正在使用一个 winform (C#) 来针对 Active Directory 对经理进行身份验证,如果经理是某个组的成员,则批准 PO。
我的情况:正在使用一个第 3 方应用程序,我正在编写一些验证代码(如上所述),这些代码在应用程序中发生保存事件之前执行。如果满足某些条件,我的验证码会返回 TRUE 并允许应用程序继续保存。当保存开始时,数据库中的一些表被插入,包括PO_HDR。我无法更改事件发生的顺序,我只能编写这些验证规则。应用程序将不会继续,直到它从我的代码接收到一个特定对象,该对象的 SUCCESS 属性设置为 TRUE 或 FALSE。
问题我遇到的问题与将 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 表上创建触发器。
为了实验,我尝试在PO_APPROVA_LOG 上创建一个AFTER INSERT 触发器,该触发器使用waitfor delay 来查看在PO_HDR 有机会填充之后是否可以获取PO_NUMBER。 (是的,我知道 waitfor delay 在触发器中是一个可怕的想法,它只是在 play 数据库中进行实验)。这不起作用,因为在插入和后续触发器执行完成之前,应用程序没有从我的验证代码 TRUE 得到响应。
我的问题:SQL 代理作业可能是一种可能的解决方案吗?它需要每隔一两分钟运行一次。我担心的一个问题是,这会对数据库造成很大负担吗?如果作业运行并确定是否应该调用一个过程来更新日志表(在PO_APPROVAL_LOG 中找到一个或多个NULL PO_NUMBER 值),也许这可以工作。
还有什么建议吗?这给我带来了一段时间的麻烦。
如果有任何不清楚的地方,请询问!谢谢!
【问题讨论】:
-
只需通读几遍。我很少将帖子 too 冗长 - 您能否解释一下为什么您希望在插入后 15 秒发生更新(确切地说?)?另外,所有东西都是通过存储过程访问的吗?
-
@Norla,我不是很清楚,抱歉。只需在填充 PO_HDR 后进行更新。应用程序(大约)需要 10-15 秒来更新数据库。另外,是的,据我所知,一切都是通过过程访问的。
-
最终结果:这简直是一团糟。日志记录要求最终发生了变化。