私が取り組んでいるストアド プロシージャは非常に単純ですが、いくつかの奇妙な問題が発生しています。基本的に、顧客が普通預金口座で 2 回以上引き出しを行うと、その後の引き出しごとに 1.00 のサービス手数料が請求されます。
問題は、1つずれているようで、4回目以降の取引でしか手数料がかからないことです。
ストアド プロシージャのコードは次のとおりです。
IF @AccountType = 'Savings' AND @Type = 'W'
BEGIN
SELECT @WithdrawCount = WithdrawalCount
FROM Accounts
WHERE AccountID = @AccountID
IF @WithdrawCount > 2
BEGIN
SET @ServiceCharge = 1.00
UPDATE Accounts SET Balance = Balance - @Amount - @ServiceCharge
WHERE Balance > 0 AND AccountID = @AccountID
UPDATE Accounts SET WithdrawalCount = WithdrawalCount + 1
WHERE Balance > 0 AND AccountID = @AccountID
INSERT INTO Transactions( AccountID, EmplNo, Amount, Description, EnteredBy, ServiceCharge, Type )
VALUES( @AccountID, @EmplNo, @Amount, @Description, @EnteredBy, @ServiceCharge, @Type )
SET @TransID = SCOPE_IDENTITY()
PRINT @TransID
END
ELSE
BEGIN
SET @ServiceCharge = 0.00
UPDATE Accounts SET Balance = Balance - @Amount - @ServiceCharge
WHERE Balance > 0 AND AccountID = @AccountID
UPDATE Accounts SET WithdrawalCount = WithdrawalCount + 1
WHERE Balance > 0 AND AccountID = @AccountID
INSERT INTO Transactions( AccountID, EmplNo, Amount, Description, EnteredBy, ServiceCharge, Type )
VALUES( @AccountID, @EmplNo, @Amount, @Description, @EnteredBy, @ServiceCharge, @Type )
SET @TransID = SCOPE_IDENTITY()
PRINT @TransID
END
SELECT @WithdrawCount = WithdrawalCount
FROM Accounts
WHERE AccountID = @AccountID
END
また、各条件 (>= 3、=3、< 3) の if ブロックがあるバージョンも作成しましたが、成功しませんでした。引き出し回数が 3 に達するとトリップする必要がある別のバージョンを作成するたびに、そうではありません。どんなアドバイスも素晴らしいでしょう。