【问题标题】:sql server procedure to update table on conditionssql server 过程根据条件更新表
【发布时间】:2013-05-04 05:28:42
【问题描述】:

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

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

Accountbalance fields
balancedue
pastdue30 
pastdue60 
pastdue90
pastdueover90

accountid 可以让我从发票到帐户和 accountbalance 和日期可以告诉我已经多长时间,然后我会根据条款更新 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

【问题讨论】:

  • 你能发布到目前为止你尝试过的东西吗?

标签: sql-server loops conditional procedure


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,帐户可以有多个未付发票。 balanceue 是所有未付发票的总和。逾期字段会跟踪逾期的金额和地点。如果我有一张 10 美元的发票逾期 30 天,那么逾期 30 天就会有 10 美元。如果我有另一个 20 美元的发票逾期 60 天,那么 pstdue60 下会有 20 美元。那么 balanceue 将是 30 美元,这是所欠的总额。我了解您的代码,但不知道如何应用于从我的 select 语句返回的所有记录。
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2016-09-04
  • 2012-05-24
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多