代理店の備考が変更できない †
- ページ: BT1
- 投稿者: 小澤!?
- 優先順位: 低
- 状態: 完了
- カテゴリー: 1次
- 投稿日: 2010-05-25 (火) 14:28:50
- バージョン:
メッセージ †
00148474 ビーワン東日本 大谷 敦洋様
- 代理店情報の追加・修正時に親代理店との親子関係チェックを行っていますが、チェックに時間がかかり過ぎてしまう場合があるようです。 -- 山下
- 時間がかかっているチェックの内容
- 現在および将来で、親代理店が対象の代理店傘下に存在しないかチェックする
- チェック方法
- 修正前
- 対象の代理店から子を辿っていって、その中に親代理店に指定されている代理店が含まれないかチェックする
- 現在および将来
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 /* 対象代理店に変更 */
- 本サイト更新確認しました。[完了]とします。 -- 西川
|