代理店の備考が変更できない

  • ページ: BT1
  • 投稿者: 小澤!?
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: 1次
  • 投稿日: 2010-05-25 (火) 14:28:50
  • バージョン:

メッセージ

00148474 ビーワン東日本 大谷 敦洋様


  • 代理店情報の追加・修正時に親代理店との親子関係チェックを行っていますが、チェックに時間がかかり過ぎてしまう場合があるようです。 -- 山下 2010-05-25 (火) 16:31:40

  • 時間がかかっているチェックの内容
    • 現在および将来で、親代理店が対象の代理店傘下に存在しないかチェックする
  • チェック方法
    • 修正前
      • 対象の代理店から子を辿っていって、その中に親代理店に指定されている代理店が含まれないかチェックする
      • 現在および将来
        WITH CTE(代理店ID, 代理店名1, 親代理店ID, 階層ID,LEVEL,SORT) 
        AS (
            SELECT  
                代理店ID
               ,代理店名1
               ,親代理店ID
               ,階層ID
               ,1 AS LEVEL
               ,RTRIM(SPACE(258)) + 親代理店ID AS SORT 
            FROM  
                M代理店子 
            WHERE 
                代理店ID = @代理店ID 
                AND M代理店子.有効開始日 <= @有効開始日 
                AND M代理店子.有効終了日 >= @有効開始日
            UNION ALL 
            SELECT 
                M代理店子.代理店ID 
               ,M代理店子.代理店名1 
               ,M代理店子.親代理店ID 
               ,M代理店子.階層ID 
               ,CTE.LEVEL + 1 
               ,CONVERT(varchar(268),RTRIM(CTE.SORT) +M代理店子.階層ID + M代理店子.代理店ID) 
            FROM 
        	M理店子 WITH(INDEX(IX_親代理店)) 
               INNER JOIN CTE ON M代理店子.親代理店ID= CTE.代理店ID 
            WHERE 
               (M代理店子.有効開始日 <= @有効開始日 
                AND M代理店子.有効終了日 >= @有効開始日) 
               OR M代理店子.有効開始日 >= @有効開始日  --将来子になる代理店も含む 
        ) 
        SELECT * FROM CTE 
        WHERE 代理店ID = @親代理店ID 
    • 修正後
      • 親代理店に指定されている代理店から親を辿っていって、その中に対象の代理店が含まれていないかをチェックする
      • 現在および将来
        WITH CTE(代理店ID, 代理店名1, 親代理店ID, 階層ID, LEVEL,SORT, 有効開始日, 有効終了日) /* 期間で絞り込むために有効開始日と有効終了日を追加 */
        AS(
           SELECT 
               代理店ID
              ,代理店名1
              ,親代理店ID
              ,階層ID
              ,1 AS LEVEL
              ,RTRIM(SPACE(258)) + 親代理店ID AS SORT
              ,有効開始日
              ,有効終了日
           FROM 
               M代理店子
           WHERE
               代理店ID = @親代理店ID /* 親代理店に変更 */
               AND (
                   (M代理店子.有効開始日 <= @有効開始日
                    AND M代理店子.有効終了日 >= @有効開始日)
                   OR M代理店子.有効開始日 >= @有効開始日) --未来も対象に含む 
           UNION ALL
               SELECT
                   M代理店子.代理店ID
                  ,M代理店子.代理店名1
                  ,M代理店子.親代理店ID
                  ,M代理店子.階層ID
                  ,CTE.LEVEL + 1
                  ,CONVERT(varchar(268),RTRIM(CTE.SORT) +M代理店子.階層ID + M代理店子.代理店ID)
                  ,CASE WHEN M代理店子.有効開始日 > CTE.有効開始日 THEN M代理店子.有効開始日 ELSE CTE.有効開始日 END AS 有効開始日
                  ,CASE WHEN M代理店子.有効終了日 < CTE.有効終了日 THEN M代理店子.有効終了日 ELSE CTE.有効終了日 END AS 有効終了日
               FROM
                   M代理店子 WITH(INDEX(IX_親代理店))
                   INNER JOIN CTE ON M代理店子.代理店ID = CTE.親代理店ID /* 親を辿るように変更 */
               WHERE
                   M代理店子.代理店ID <> @無効代理店ID
                   AND M代理店子.代理店ID <> @本社代理店ID
                   AND NOT (
                       M代理店子.有効終了日 < CTE.有効開始日
                       OR M代理店子.有効開始日 > CTE.有効終了日) /* 期間内に有効であるための条件 */
        )
        SELECT * FROM CTE
        WHERE 代理店ID = @代理店ID /* 対象代理店に変更 */
        チェック方法変更.png

  • 本サイト更新確認しました。[完了]とします。 -- 西川 2010-05-27 (木) 09:56:34


添付ファイル: fileチェック方法変更.png 97件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-29 (金) 19:31:12