コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
USE [tsetDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_UpdateTotalPriceIncludeTax]
@RetCode INT OUTPUT --エラーコード
AS
BEGIN
--------------------------------------------------------------------
--変数宣言
--------------------------------------------------------------------
DECLARE @CntRecord INT; --レコードカウント
DECLARE @OrderCode NUMERIC(18, 0); --受注番号
DECLARE @TotalPriceIncludeTax MONEY; --税込合計金額
--------------------------------------------------------------------
--カーソル宣言
--------------------------------------------------------------------
DECLARE Cur_CustomerOrder CURSOR LOCAL FOR
SELECT OrderCode
FROM ES30_CustomerOrder AS ES30
WHERE ES30.Deleted = 0
;
--------------------------------------------------------------------
--更新処理
--------------------------------------------------------------------
BEGIN TRANSACTION
BEGIN TRY
--カーソルオープン
OPEN Cur_CustomerOrder
FETCH NEXT FROM Cur_CustomerOrder
--最初の行[0番目]の値の格納
INTO @OrderCode;
--@@FETCH_STATUS:最後の行を超えたときは-2が設定される。
WHILE @@FETCH_STATUS = 0
BEGIN
--受注番号ごとに税込合計金額の取得
SELECT @TotalPriceIncludeTax =
dbo.usp_RoundDown(SUM(ES31.Price), 0) +
dbo.usp_RoundDown(SUM(ES31.Tax), 0)
FROM ES30_CustomerOrder AS ES30
LEFT JOIN
ES31_CustomerOrder_Details AS ES31
ON ES30.OrderCode = ES31.OrderCode
WHERE ES30.OrderCode = @OrderCode
AND ES30.Deleted = 0
AND ES31.Deleted = 0
;
--取得した合計金額で受注を更新
UPDATE ES30_CustomerOrder
SET TotalPriceIncludeTax = @TotalPriceIncludeTax
WHERE OrderCode = @OrderCode
AND Deleted = 0
;
--更新レコード数取得
SET @CntRecord = @@ROWCOUNT;
IF @CntRecord = 1
--成功時の処理
BEGIN
SET @RetCode = 0;
END;
ELSE
BEGIN
SET @RetCode = 1;
--エラーの場合ロールバックして終了
ROLLBACK TRANSACTION;
--カーソル処理の終了宣言
CLOSE Cur_CustomerOrder ;
DEALLOCATE Cur_CustomerOrder;
RETURN;
END;
FETCH NEXT FROM Cur_CustomerOrder
--次の行の値の格納
INTO @OrderCode;
END;
END TRY
BEGIN CATCH
SET @RetCode = 1;
--エラーの場合ロールバックして終了
ROLLBACK TRANSACTION;
--カーソル処理の終了宣言
CLOSE Cur_CustomerOrder ;
DEALLOCATE Cur_CustomerOrder;
RETURN;
END CATCH;
--------------------------------------------------------------------
--終了処理
--------------------------------------------------------------------
CLOSE Cur_CustomerOrder ;
DEALLOCATE Cur_CustomerOrder;
IF @RetCode = 0
--成功時の処理
BEGIN
--全て成功ならコミット
COMMIT TRANSACTION;
END;
ELSE
BEGIN
SET @RetCode = 1 ;
--エラーの場合ロールバックして終了
ROLLBACK TRANSACTION;
RETURN;
END;
END;
GO
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。