0

我目前正在为我的项目做一个银行网站,使用 C# 和 asp.net。其中一项功能是“剩余每日限额”。将系统日期更改为另一天后,我需要将数据库值更改回默认值。示例:如果用户有 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

这为您提供了历史限制视图,您可以将其提供给用户或数据挖掘。同样,这就是我应用当前每日限额的方式。

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

(由于这里的实体框架,我的原始 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 回答