一時テーブルから本テーブルにデータを移行させる処理をバッチを使用して、プロシージャで実行させたいのですが、上手くいきません。
自分の中では、一時テーブルの有効日付を有効期限切れにして、実行すれば論理削除できると思っていますが、上手くいきません。
ご教示頂ければと思います。
CREATE PROCEDURE [dbo].[sp_TEST]
@pMst_Handling_Company_Id INT
AS
SET NOCOUNT ON;
DECLARE @ErrMessage VARCHAR(1000) -- エラーメッセージ
, @iParm_Check INT -- チェック用
, @iIs_TrnStart INT -- トランザクション開始判定(0:トランザクション未開始、1:トランザクション開始)
, @dUpdate_Date DATETIME -- 更新日時
, @vUpdate_User_Id VARCHAR(40) -- 更新ユーザー
, @vUpdate_Prg_Id VARCHAR(20) -- 更新プログラムID
, @dTaisyo_Date DATETIME -- 対象日付
-- 入力データチェック用
, @curInput CURSOR -- 入力チェック用カーソル
, @I_INPUT_CHECK INT -- 未入力チェック (0:チェックOK、1:チェックNG)
, @I_LOGI_ONETMCSTM_CD VARCHAR(30) -- 物流ワンタイムコード
, @I_CHKDEGT_SHIPCSTM_CD VARCHAR(11) -- チェックデジット付出荷先コード
-- 重複チェック用
, @curDuplicate1 CURSOR -- 重複レコードカーソル
;
-- 対象データ保持テーブル
CREATE TABLE #tTmp_MARSIF_TMP
(
LOGI_ONETMCSTM_CD VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS -- 物流ワンタイムコード
, ONETMCSTM_CD VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS -- ワンタイムコード
, VKORG VARCHAR(4) COLLATE Japanese_CI_AI_KS_WS -- 販売組織
, LOGI_CHANEL_CD VARCHAR(2) COLLATE Japanese_CI_AI_KS_WS -- 物流流通チャネルコード
, SPART VARCHAR(2) COLLATE Japanese_CI_AI_KS_WS -- 製品部門
, KANA_NM VARCHAR(600) COLLATE Japanese_CI_AI_KS_WS -- ワンタイムカナ名称
, SHORT_NM VARCHAR(120) COLLATE Japanese_CI_AI_KS_WS -- ワンタイム略称
, POST_CD_SAP VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS -- SAP用郵便番号
, COUNTRY VARCHAR(2) COLLATE Japanese_CI_AI_KS_WS -- 国コード
, TEL VARCHAR(15) COLLATE Japanese_CI_AI_KS_WS -- 電話
, FAX VARCHAR(15) COLLATE Japanese_CI_AI_KS_WS -- FAX
, WAERS VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS -- 通貨コード
, KALKS VARCHAR(1) COLLATE Japanese_CI_AI_KS_WS -- 得意先価格決定区分
, TAXKD VARCHAR(1) COLLATE Japanese_CI_AI_KS_WS -- 税分類
, KVGR1 VARCHAR(3) COLLATE Japanese_CI_AI_KS_WS -- 得意先グループ1
, SHIP_AREA VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS -- 納入区域
, AREA_CD VARCHAR(10) COLLATE Japanese_CI_AI_KS_WS -- 地域コード
);
-- 0.初期値セット SET @iParm_Check = 0; SET @iIs_TrnStart = 0; SET @dUpdate_Date = GETDATE(); SET @vUpdate_User_Id = 'SYSTEM'; SET @vUpdate_Prg_Id = 'sp_141_700'; SET @dTaisyo_Date = dbo.Fnc_GET_ONLINE_DATE(@dUpdate_Date, 0); -- 0.1.パラメータチェック -- 取扱会社ID IF (@pMst_Handling_Company_Id IS NULL) BEGIN SET @ErrMessage = 'ワンタイム出荷先マスタ登録処理で、パラメータが正しく指定されませんでした。確認してください。' EXEC sc_090_000 '-1','sp_141_700(出荷先マスタ登録)',@ErrMessage --エラーログ出力 RETURN -1 -- システムエラー END -- 1.対象データ取得 INSERT INTO #tTmp_MARSIF_TMP SELECT LTRIM(RTRIM(CONVERT(VARCHAR(10),ISNULL(MST.LOGI_ONETMCSTM_CD,'')))) -- 物流ワンタイムコード , LTRIM(RTRIM(CONVERT(VARCHAR(12),ISNULL(MST.ONETMCSTM_CD,'')))) -- ワンタイムコード , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.VKORG,'')))) -- 販売組織 , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.LOGI_CHANEL_CD,'')))) -- 物流流通チャネルコード , LTRIM(RTRIM(CONVERT(VARCHAR(2),ISNULL(MST.SPART,'')))) -- 製品部門 , LTRIM(RTRIM(CONVERT(VARCHAR(4),ISNULL(MST.KANA_NM,'')))) -- ワンタイムカナ名称 , LTRIM(RTRIM(CONVERT(VARCHAR(70),dbo.Fnc_NARROW_TO_WIDE(ISNULL(MST.SHORT_NM,''))))) -- 出荷先正式名称 , CASE WHEN LEN(LTRIM(RTRIM(ISNULL(MST.POST_CD,'')))) = 7 -- 郵便番号 THEN LTRIM(RTRIM(ISNULL(MST.POST_CD,''))) -- SAP用郵便番号 ELSE '' END , LTRIM(RTRIM(CONVERT(VARCHAR(10),ISNULL(MST.COUNTRY,'')))) -- 国コード , LTRIM(RTRIM(CONVERT(VARCHAR(16),ISNULL(MST.TEL,'')))) -- 電話 , LTRIM(RTRIM(CONVERT(VARCHAR(31),ISNULL(MST.FAX,'')))) -- FAX , LTRIM(RTRIM(CONVERT(VARCHAR(31),ISNULL(MST.WAERS,'')))) -- 通貨コード , LTRIM(RTRIM(CONVERT(VARCHAR(5),ISNULL(MST.KALKS,'')))) -- 得意先価格決定区分 , CASE WHEN ISNULL(MST.TAXKD, '0') = '1' -- 税分類 THEN '1' ELSE '0' END , LTRIM(RTRIM(CONVERT(VARCHAR(3),ISNULL(MST.KVGR1,'')))) -- 得意先グループ1 , CASE WHEN ISNULL(MST.SHIP_AREA, '') = '' -- 納入区域 THEN 'Z900000001' ELSE LTRIM(RTRIM(CONVERT(VARCHAR(10),ISNULL(MST.SHIP_AREA,'')))) END , LTRIM(RTRIM(RIGHT('000' + LEFT(ISNULL(MST.AREA_CD,''), 3),3))) -- 地域コード FROM dbo.MARSIF_TMP_ONETMCSTM_MST AS MST -- ワンタイムマスタ一時テーブル WHERE CONVERT(DATETIME, MST.EFFECTIVE_DT_FROM) <= @dTaisyo_Date AND CONVERT(DATETIME, MST.EFFECTIVE_DT_TO) > @dTaisyo_Date if (@@ROWCOUNT < 1) BEGIN --正常完了ログ出力 EXEC sc_090_000 '0','sp_141_700(取込対象ファイルなし)','SUCCESS' RETURN 0 -- 正常終了 END -- 2.重複レコード(R/3物流ワンタイムコード)チェック INSERT INTO #tTmp_DUPLICAT SELECT LOGI_ONETMCSTM_CD , COUNT(LOGI_ONETMCSTM_CD) FROM #tTmp_MARSIF_TMP GROUP BY LOGI_ONETMCSTM_CD HAVING COUNT(LOGI_ONETMCSTM_CD) > 1 SET @curDuplicate1 = CURSOR FOR SELECT LOGI_ONETMCSTM_CD FROM #tTmp_DUPLICAT OPEN @curDuplicate1; -- 3.1 レコード数分ループ WHILE (1=1) BEGIN FETCH NEXT FROM @curDuplicate1 INTO @I_LOGI_ONETMCSTM_CD; IF (@@FETCH_STATUS < 0) BREAK; -- 3.1.1チェック(抽出したテーブルに存在した場合エラー) SET @ErrMessage = 'ワンタイム出荷先マスタ登録処理でエラーが発生しました。重複したR/3物流ワンタイムコード(物流ワンタイムコード「' + CONVERT(VARCHAR, @I_LOGI_ONETMCSTM_CD) + '」)を登録しようとしました。確認してください。' EXEC sc_090_000 '-1','sp_141_700(ワンタイム出荷先マスタ登録)',@ErrMessage --エラーログ出力 END --カーソル終了 CLOSE @curDuplicate1; DEALLOCATE @curDuplicate1; -- トランザクション開始 BEGIN TRANSACTION SET @iIs_TrnStart = 1; **-- 4. ワンタイム出荷先マスタ論理削除 UPDATE dbo.MST_W_SHOP_SHIPMENT SET EFFECT_FLG = 0 -- ワンタイム出荷先マスタ有効区分(0(False):無効) , UPDATE_DATE = @dUpdate_Date , UPDATE_USER_ID = @vUpdate_User_Id , UPDATE_PRG_ID = @vUpdate_Prg_Id WHERE MST_W_SHOP_SHIPMENT.MST_HANDLING_COMPANY_ID = @pMst_Handling_Company_Id AND MST_W_SHOP_SHIPMENT.EFFECT_FLG = 1 AND NOT EXISTS (SELECT * FROM #tTmp_MARSIF_TMP WHERE #tTmp_MARSIF_TMP.LOGI_ONETMCSTM_CD = MST_W_SHOP_SHIPMENT.SHOP_SHIPMENT_CD) ;**
回答1件
あなたの回答
tips
プレビュー