0

私は現在、C#とasp.netを使用して、プロジェクトの銀行のWebサイトを作成しています。関数の1つは、「残りの1日あたりの制限」です。システムの日付を別の日に変更したら、データベース値をデフォルトに戻す必要があります。例:ユーザーが1日あたりの制限として$ 500(デフォルト値)を持っていて、すべてを使い果たした場合。翌日、彼は再び500ドルを持っています。どうすればいいのかわかりますか?

4

4 に答える 4

0

デフォルト値は通常、いくつかの構成ファイルに残ります。あなたの特定のケースでは、私はあなたができると言うでしょう

  • またはtableデフォルト値で

  • または、復元機能を使用tablesできる場合は、対応する値を持つデフォルトの列があります。

後で、いくつかを使用してそれらを復元できますstored procedure

于 2012-07-13T20:00:05.553 に答える
0

SQL ジョブを作成して、毎晩深夜に実行するようにスケジュールできます。ジョブ内で、値を $500 にリセットするストアド プロシージャを実行できます。

于 2012-07-13T20:08:06.793 に答える
0

私の意見では、将来他の要件がある可能性があることに基づいて、次のような表を作成します。

UserID    AppliedOn    Limit
1         1/1/2012     500
1         2/1/2012     750

これにより、ユーザーまたはデータマイニングに与えることができる制限の履歴ビューが得られます。同じように、それが現在の 1 日の制限を適用する方法です。

UserID    AppliedOn    Withdrawn
1         1/10/2012    125
1         1/10/2012    225

2012 年 1 月 1 日現在、ジョブやトリガーがない場合、制限内に残っている金額を簡単に判断できます。また、他の機能についてデータマイニングできる履歴値が得られます。

SELECT
  ul.Limit - uw.Sum as LimitLeft
FROM
  UserLimit ul
  INNER JOIN (
    SELECT 
      UserID,
      AppliedOn,   
      SUM(Limit) as Sum
    FROM
      UserLimit
    Group by
      UserID,
      AppliedOn) uw on ul.UserID = uw.UserID
                       and ul.AppliedOn = uw.AppliedOn
WHERE
  ul.UserID = @userID 
  AND ul.AppliedOn = @dateInQuestion

(ここの Entity Framework のせいで、私の生の SQL スキルは少しさびているかもしれません)。

于 2012-07-13T20:19:41.153 に答える
0

これは、いくつかのサンプルデータを使用してデータベースをセットアップする方法を作成する SQL スクリプトです。

CREATE TABLE tblBankCustomer
(
    BankCustomerId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
    , FirstName NVARCHAR(100) NOT NULL
    , LastName NVARCHAR(100) NOT NULL
    , DailySpendingLimit DECIMAL(38, 2) NOT NULL CONSTRAINT DF_tblBankCustomer_DailySpendingLimit DEFAULT(500)
)

CREATE TABLE tblTransactionType
(
    TransactionTypeId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
    , TransactionType VARCHAR(50) NOT NULL
)

INSERT tblTransactionType (TransactionType)
VALUES ('Deposit')
    , ('Withdrawal')

CREATE TABLE tblTransaction
(
    TransactionId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
    , BankCustomerId INT NOT NULL
    , TransactionDate DATE NOT NULL
    , Amount DECIMAL(38, 2) NOT NULL
    , TransactionTypeId INT NOT NULL
)

ALTER TABLE tblTransaction
ADD CONSTRAINT FX_tblTransaction_tblBankCustomer
FOREIGN KEY (BankCustomerId)
REFERENCES tblBankCustomer(BankCustomerId)

ALTER TABLE tblTransaction
ADD CONSTRAINT FX_tblTransaction_tblTransactionType
FOREIGN KEY (TransactionTypeId)
REFERENCES tblTransactionType(TransactionTypeId)

INSERT tblBankCustomer
(
    FirstName
    , LastName
)
VALUES ('Jeremy', 'Pridemore')
    , ('K', 'YQ')

INSERT tblTransaction
(
    BankCustomerId
    , TransactionDate
    , Amount
    , TransactionTypeId
)
VALUES
    (1, CURRENT_TIMESTAMP, 48.50, 2) -- Jeremy, Today, $48.50, Withdrawal
    , (1, CURRENT_TIMESTAMP, 300.00, 2) -- Jeremy, Today, $300, Withdrawal
    , (1, CURRENT_TIMESTAMP, -200.00, 1) -- Jeremy, Today, $200, Deposit
    , (2, CURRENT_TIMESTAMP, 285.00, 2) -- K, Today, $285, Withdrawal
    , (2, CURRENT_TIMESTAMP, 215.00, 2) -- K, Today, $215, Withdrawal
GO
CREATE FUNCTION fGetRemainingSpendingLimit
(
    @BankCustomerId INT
    , @Date DATE
)
RETURNS DECIMAL(38, 2)
BEGIN
    SET @Date = ISNULL(@Date, CURRENT_TIMESTAMP)

    DECLARE @RemainingLimit DECIMAL(38, 2) =
    (SELECT
        SUM([Transaction].Amount)
    FROM tblBankCustomer Customer
    INNER JOIN tblTransaction [Transaction]
        ON [Transaction].BankCustomerId = Customer.BankCustomerId
        AND [Transaction].TransactionDate = @Date
    INNER JOIN tblTransactionType TransactionType
        ON TransactionType.TransactionTypeId = [Transaction].TransactionTypeId
        AND TransactionType.TransactionType = 'Withdrawal'
    WHERE Customer.BankCustomerId = @BankCustomerId)

    RETURN @RemainingLimit
END
GO

-- Some sample selects
SELECT dbo.fGetRemainingSpendingLimit(1, NULL)
SELECT dbo.fGetRemainingSpendingLimit(2, NULL)

次に、C# で、作業している顧客の顧客 ID を知る必要があります。ADO.NET などを使用している場合は、この関数を直接呼び出して、コードで値を使用できます。

于 2012-07-13T20:26:07.053 に答える