0

我正在尝试编写一个存储过程,它将每天运行并检查发票是否过期。我想从表中提取所有未付款的发票,然后我想查看它们并找出今天日期和下订单日期之间的差异。从那里我想检查该订单的账户条款是什么(基本上他们必须支付多长时间),如果他们超过了条款,那么我将计算服务费并更新 balanceue。我对要做什么有一个基本的想法,但我不知道如何在不遍历每个记录的情况下浏览所选记录。我认为在 sql server 中有更好的方法。

invoice 表有 accountid、ispaid 和 creationdate。帐户表作为帐户的条款。然后我有一个 accountbalance 表,其中有几个字段,如果需要我会更新。

Accountbalance fields
balancedue
pastdue30 
pastdue60 
pastdue90
pastdueover90

accountid 可以让我从发票到帐户和帐户余额,日期可以告诉我它已经过了多长时间,然后我会根据条款更新 accountbalance 以及它已经逾期多长时间。我知道没有看到它有点难以理解。

这就是我基本上想要做的我只是不知道如何为每条记录做

select * from invoice where ispaid = 0

days = currentdate - invoicecreationdate

switch (days)

case 30

update balance

case 60

update balance

case 90

update balance



if(days > terms)

update balance add servicecharge
4

1 回答 1

0

您的添加有所帮助,但我仍然有点不确定这里发生了什么(例如,Accountbalance 中的 pastdueXX 字段是什么以及它们与balancedue 字段有什么关系?)。另外,一个帐户可以有多个逾期发票吗?

听起来您正在寻找类似于以下内容的内容:

update ab set balancedue = 
     (case when datediff(i.creationdate,getdate()) > 90 then balance due + ...
           when datediff(i.creationdate,getdate()) > 60 then balance due + ...
           ...
      end)
from accountbalance ab
join account a
    on ab.accountid = a.accountid
join invoice i 
    on a.accountid = i.accountid

抱歉含糊不清,但还是有一些问题。

于 2013-05-09T18:32:56.977 回答