2010-11-01 3 views
0

Fondamentalement, je veux prendre mon Account.Balance actuel et calculer l'intérêt une fois par jour, basé sur le taux défini comme Account.InterestRate.Comment calculer l'intérêt quotidiennement dans SQL Server 2008 à l'aide d'une procédure stockée?

J'ai la table "Compte" avec (colonnes pertinentes) "InterestRate" et "Balance". J'ai besoin d'un travail exécuté tous les soirs (@ minuit?) Qui calcule le champ Balance en fonction de la valeur actuelle de Balance et de l'InterestRate.

Comment pourrais-je procéder?

+0

Donc un oubli de ma part a créé un problème. Je ne peux pas faire l'instruction UPDATE dans la colonne Solde, car Balance est une colonne calculée. Je dois faire quelque chose comme INSERT INTO [Transaction] les colonnes "Account_Id", "Amount", "DateTime", "Comment", et "Trans_Type_Id" pour chaque compte ... –

+0

Est intérêt par jour ou par an? Plat ou APR? – gbn

Répondre

0

J'ai trouvé une bonne façon de le faire. Fondamentalement, puisque je ne peux pas éditer Account.Balance directement, je crée un nouvel enregistrement de transaction pour créditer (ou débiter, si le solde est négatif) l'intérêt, qui est défini par compte Account.Balance *. Taux d'intérêt. Le calcul que j'utilise est simple et fonctionne bien pour une forme très simple de calculs d'intérêts. Si, cependant, je voulais le calculer une fois par jour pour, par exemple, 12,99% APR, le calcul serait un peu différent. Voici des exemples des deux.

Pour calculer l'intérêt quotidien de base, mis en place un travail à exécuter tous les soirs @ 12:00:00 AM exécutant la commande suivante:

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 

Cela va créer une nouvelle transaction une fois par jour pour chaque client dont le compte. Interest_Rate n'est pas 0.0000%.

Pour calculer APR dire pour les comptes de type CreditCard, mis en place un travail à exécuter par mois sur le 1er de chaque mois @ 12:00:00 AM exécutant la commande suivante:

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 

(où ACCOUNT_TYPE = 103 est "CreditCard")

1

Vous pouvez écrire un procedure ou tout simplement sql droite et ajouter la logique de calcul de la balance (qui devrait être une mise à jour avec un nouveau calcul de l'équilibre) quelque chose comme ça -

Update Account Set balance=balance*interest 

puis utiliser le serveur SQL agent pour créer jobs (votre sql) à exécuter tous les soirs (note: l'agent SQL Server ne fonctionnera pas sur les éditions Express ... dans ce cas, vous devrez peut-être utiliser des tâches planifiées sur votre serveur et exécuter des fichiers batch (.bat).

+0

J'imagine Balance doit être mis à jour à Balance + (Balance * InterestRate) Comment est-ce que je devrais faire en sorte que la procédure soit mise en file d'attente dans tous les comptes et mettre à jour les soldes, le cas échéant? –

+0

Ya peut-être ... Je ne suis pas sûr comment fonctionne votre base de données .. vous pourriez avoir besoin de comprendre une requête qui met à jour tous les comptes et vous n'avez pas besoin d'une procédure à moins que ... vous voulez passer quelque chose ... ajoutez votre logique ... – Vishal

+0

Est-ce que "UPDATE Account SET Balance Balance = Balance + (Balance * Interest_Rate)" met à jour toutes les instances de Account.Balance? –

Questions connexes