Sql server 2008 如何使用存储过程计算SQL Server 2008中的每日利息?

Sql server 2008 如何使用存储过程计算SQL Server 2008中的每日利息?,sql-server-2008,scheduling,Sql Server 2008,Scheduling,基本上,我想取我的活期存款。根据Account.InterestRate定义的利率,每天结算并计算一次利息 我有一个表“账户”,表中有(相关列)“利率”和“余额”。我需要每晚运行一个作业(@midnight?),该作业根据余额的当前值和利率计算余额字段 我该怎么做呢?您可以编写一个或直接sql,并添加用于计算余额的逻辑(应该是重新计算余额的更新),类似这样的内容- Update Account Set balance=balance*interest 然后使用sql server创建每晚执行的

基本上,我想取我的活期存款。根据Account.InterestRate定义的利率,每天结算并计算一次利息

我有一个表“账户”,表中有(相关列)“利率”和“余额”。我需要每晚运行一个作业(@midnight?),该作业根据余额的当前值和利率计算余额字段

我该怎么做呢?

您可以编写一个或直接sql,并添加用于计算余额的逻辑(应该是重新计算余额的更新),类似这样的内容-

Update Account Set balance=balance*interest

然后使用sql server创建每晚执行的作业(您的sql)(注意:sql server代理在Express Edition上不起作用…在这种情况下,您可能需要在服务器上使用计划任务并运行批处理(.bat)文件。)

我找到了一种强大的方法

基本上,因为我不能直接编辑Account.Balance,所以我正在创建一个新的交易记录来贷记(或借记,如果余额为负数)利息,这是由Account.Balance*Account.interest\u利率定义的。我使用的计算方法很简单,并且适用于非常简单的兴趣计算。但是,如果我想每天计算一次,例如,每年12.99%的年利率,计算结果会有点不同。这里有两个例子

要计算每日基本利息,请设置作业,使其在凌晨12:00:00运行,运行以下操作:

INSERT INTO [Transaction] ([Account_Id], [Amount], [Trans_Type_Id], [DateTime], [Comment])
SELECT Account_Id, Balance * Interest_Rate, 101, GETDATE(), 'Interest' FROM Account WHERE Interest_Rate <> 0.0000
INSERT INTO [Transaction] ([Account_Id], [Amount], [Trans_Type_Id], [DateTime], [Comment])
SELECT Account_Id, ((Interest_Rate/12) * Balance), 101, GETDATE(), 'Interest' FROM Account WHERE Interest_Rate <> 0.0000 AND Account_Type = 103
插入[交易]([账户Id]、[金额]、[交易类型Id]、[日期时间]、[注释])
选择账户Id、余额*利率、101、GETDATE()、利率为0.0000的账户的“利息”
这将为账户利率不为0.0000%的每个客户每天创建一次新交易

要计算APR,例如对于信用卡类型的帐户,请设置一个作业,在每月1日上午12:00:00运行,运行以下操作:

INSERT INTO [Transaction] ([Account_Id], [Amount], [Trans_Type_Id], [DateTime], [Comment])
SELECT Account_Id, Balance * Interest_Rate, 101, GETDATE(), 'Interest' FROM Account WHERE Interest_Rate <> 0.0000
INSERT INTO [Transaction] ([Account_Id], [Amount], [Trans_Type_Id], [DateTime], [Comment])
SELECT Account_Id, ((Interest_Rate/12) * Balance), 101, GETDATE(), 'Interest' FROM Account WHERE Interest_Rate <> 0.0000 AND Account_Type = 103
插入[交易]([账户Id]、[金额]、[交易类型Id]、[日期时间]、[注释])
选择账户Id((利率/12)*余额)、101、GETDATE()、利率为0.0000且账户类型为103的账户的“利息”

(其中账户类型=103为“信用卡”)

我想余额应该更新为余额+(余额*利率)我该如何让该过程通过所有帐户并适当地更新余额?可能……我不确定您的数据库如何工作……您可能需要找出一个更新所有帐户的查询,并且您不需要过程,除非……您想传递一些信息……只需创建一个作业并添加您的逻辑……就可以了“UPDATE Account SET Balance=Balance+(Balance*Interest_Rate)”更新Account.Balance的所有实例?是..它将对表中的所有条目执行此操作。因此,我的疏忽造成了一个问题。我无法在Balance列上执行UPDATE语句,因为Balance是一个计算列。我需要执行类似INSERT INTO的操作[交易]每个账户的“账户Id”、“金额”、“日期时间”、“备注”和“交易类型Id”列……是日利息还是年利息?是固定利息还是四月利息?