add_receipt_container_detail_status.sql 1.86 KB
-- ============================================
-- 入库组盘详情表新增 status 字段
-- 用于按入库单ID和组盘详情状态进行ERP回传
-- ============================================

-- 添加 status 字段到 receipt_container_detail 表
ALTER TABLE receipt_container_detail ADD status INT NULL;

-- 为现有数据设置初始状态值(基于现有组盘头的状态同步)
-- 注意:这个脚本需要在测试环境执行,生产环境执行前请先备份数据

-- 更新现有数据:根据 receipt_container_id 关联 receipt_container_header 表获取状态
UPDATE rcd
SET rcd.status = rch.status
FROM receipt_container_detail rcd
INNER JOIN receipt_container_header rch ON rcd.receipt_container_id = rch.id
WHERE rcd.status IS NULL;

-- 如果没有关联到组盘头的数据,设置默认状态为 10(组盘状态)
UPDATE receipt_container_detail
SET status = 10
WHERE status IS NULL;

-- ============================================
-- 查询验证
-- ============================================

-- 查看表结构
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'receipt_container_detail'
AND COLUMN_NAME = 'status';

-- 查看状态分布
SELECT
    CASE WHEN status IS NULL THEN 'NULL'
         WHEN status = 0 THEN '0-新建'
         WHEN status = 10 THEN '10-组盘'
         WHEN status = 20 THEN '20-入库完成'
         WHEN status = 50 THEN '50-已回传'
         ELSE CAST(status AS VARCHAR)
    END as status_desc,
    COUNT(*) as cnt
FROM receipt_container_detail
GROUP BY CASE WHEN status IS NULL THEN 'NULL'
              WHEN status = 0 THEN '0-新建'
              WHEN status = 10 THEN '10-组盘'
              WHEN status = 20 THEN '20-入库完成'
              WHEN status = 50 THEN '50-已回传'
              ELSE CAST(status AS VARCHAR)
         END
ORDER BY ISNULL(status, 999);