自动化立体仓库 - WMS系统
zwl
2 天以前 fb57e7836338304b16c09fec4fb5c68fb688c39e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
IF COL_LENGTH('dbo.asr_loc_mast', 'area_id') IS NULL
BEGIN
    ALTER TABLE [dbo].[asr_loc_mast]
        ADD [area_id] INT NULL;
END;
 
EXEC sys.sp_executesql N'
UPDATE [dbo].[asr_loc_mast]
SET [area_id] =
    CASE
        WHEN [crn_no] BETWEEN 1 AND 6 THEN 1
        WHEN [crn_no] BETWEEN 7 AND 18 THEN 2
        WHEN [crn_no] BETWEEN 19 AND 28 THEN 3
        ELSE [area_id]
    END
WHERE [area_id] IS NULL
  AND [crn_no] BETWEEN 1 AND 28;
';
 
IF COL_LENGTH('dbo.asr_wrk_mast', 'area_id') IS NULL
BEGIN
    ALTER TABLE [dbo].[asr_wrk_mast]
        ADD [area_id] INT NULL;
END;
 
EXEC sys.sp_executesql N'
UPDATE m
SET area_id = CASE
        WHEN m.io_type >= 100 THEN COALESCE(source_loc.area_id, target_loc.area_id)
        ELSE COALESCE(target_loc.area_id, source_loc.area_id)
    END
FROM dbo.asr_wrk_mast m
LEFT JOIN dbo.asr_loc_mast target_loc ON target_loc.loc_no = m.loc_no
LEFT JOIN dbo.asr_loc_mast source_loc ON source_loc.loc_no = m.source_loc_no
WHERE m.area_id IS NULL
  AND CASE
        WHEN m.io_type >= 100 THEN COALESCE(source_loc.area_id, target_loc.area_id)
        ELSE COALESCE(target_loc.area_id, source_loc.area_id)
      END IS NOT NULL;
';
 
IF OBJECT_ID('dbo.asr_wrk_mast_log', 'U') IS NOT NULL
BEGIN
    IF COL_LENGTH('dbo.asr_wrk_mast_log', 'area_id') IS NULL
    BEGIN
        ALTER TABLE [dbo].[asr_wrk_mast_log]
            ADD [area_id] INT NULL;
    END;
 
    EXEC sys.sp_executesql N'
    UPDATE m
    SET area_id = CASE
            WHEN m.io_type >= 100 THEN COALESCE(source_loc.area_id, target_loc.area_id)
            ELSE COALESCE(target_loc.area_id, source_loc.area_id)
        END
    FROM dbo.asr_wrk_mast_log m
    LEFT JOIN dbo.asr_loc_mast target_loc ON target_loc.loc_no = m.loc_no
    LEFT JOIN dbo.asr_loc_mast source_loc ON source_loc.loc_no = m.source_loc_no
    WHERE m.area_id IS NULL
      AND CASE
            WHEN m.io_type >= 100 THEN COALESCE(source_loc.area_id, target_loc.area_id)
            ELSE COALESCE(target_loc.area_id, source_loc.area_id)
          END IS NOT NULL;
    ';
END;