質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

1897閲覧

論理削除処理が上手くできません

KINGFROG

総合スコア27

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

1クリップ

投稿2016/10/16 12:04

編集2016/10/21 13:23

一時テーブルから本テーブルにデータを移行させる処理をバッチを使用して、プロシージャで実行させたいのですが、上手くいきません。
自分の中では、一時テーブルの有効日付を有効期限切れにして、実行すれば論理削除できると思っていますが、上手くいきません。
ご教示頂ければと思います。

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) ;**

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hana-da

2016/10/24 00:04

非常に読みにくいので ``` を上手に使って整形した方が回答がつきやすいと思います。このままでは誰も読み解く元気が出ないと思います。
guest

回答1

0

自己解決

なんとか自己解決できました。

投稿2016/11/23 02:32

KINGFROG

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問