SET NOCOUNT ON; SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; IF OBJECT_ID(N'dbo.bas_cargo_area_config', N'U') IS NULL THROW 51100, N'缺少bas_cargo_area_config,请先执行货区方向迁移。', 1; DECLARE @direction TABLE ( warehouse_id nvarchar(80) NOT NULL, cargo_area_code nvarchar(10) NOT NULL, direction_type nvarchar(2) NOT NULL, PRIMARY KEY (warehouse_id, cargo_area_code) ); INSERT INTO @direction(warehouse_id, cargo_area_code, direction_type) VALUES (N'03', N'A', N'1'), (N'03', N'B', N'1'), (N'03', N'C', N'1'), (N'03', N'D', N'2'), (N'03', N'E', N'1'), (N'03', N'F', N'2'), (N'03', N'G', N'2'), (N'03', N'H', N'2'); MERGE dbo.bas_cargo_area_config AS target USING @direction AS source ON target.warehouse_id = source.warehouse_id AND target.cargo_area_code = source.cargo_area_code WHEN MATCHED THEN UPDATE SET direction_type = source.direction_type, is_active = N'1', update_by = N'admin', update_time = SYSDATETIME(), remark = N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小' WHEN NOT MATCHED THEN INSERT (warehouse_id, cargo_area_code, cargo_area_name, direction_type, is_active, create_by, create_time, remark) VALUES (source.warehouse_id, source.cargo_area_code, source.cargo_area_code + N'货区', source.direction_type, N'1', N'admin', SYSDATETIME(), N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小'); UPDATE dbo.bas_cargo_space SET the_height = CASE WHEN the_floor = 1 THEN 2 ELSE 1 END WHERE warehouse_id = N'03' AND status = N'1' AND (the_height IS NULL OR the_height != CASE WHEN the_floor = 1 THEN 2 ELSE 1 END); IF (SELECT COUNT(*) FROM dbo.bas_cargo_space WHERE warehouse_id = N'03' AND status = N'1') != 1028 THROW 51102, N'03仓普通货位数量异常,拒绝配置高度。', 1; IF EXISTS ( SELECT 1 FROM dbo.bas_cargo_space WHERE warehouse_id = N'03' AND status = N'1' AND (the_height IS NULL OR the_height != CASE WHEN the_floor = 1 THEN 2 ELSE 1 END) ) THROW 51103, N'03仓普通货位高度配置失败。', 1; IF NOT EXISTS ( SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_cargo_space') AND name = N'IX_bas_cargo_space_dense_lane' ) CREATE NONCLUSTERED INDEX IX_bas_cargo_space_dense_lane ON dbo.bas_cargo_space(warehouse_id, roadway_id, group_coding, status) INCLUDE(cargo_space_id, this_cargo_area, the_type, the_height, the_column, the_floor, the_platoon, locked, tray_code); IF NOT EXISTS ( SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_stock') AND name = N'IX_bas_stock_cargo_space_id' ) CREATE NONCLUSTERED INDEX IX_bas_stock_cargo_space_id ON dbo.bas_stock(cargo_space_id) INCLUDE(stock_id, warehouse_id, in_type, project_no); IF NOT EXISTS ( SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.mydo_job') AND name = N'IX_mydo_job_dense_reservation' ) CREATE NONCLUSTERED INDEX IX_mydo_job_dense_reservation ON dbo.mydo_job(warehouse_id, tray_code, status, in_or_out) INCLUDE(job_id, cargo_space_id, roadway_id); IF (SELECT COUNT(*) FROM dbo.bas_cargo_area_config WHERE warehouse_id = N'03' AND cargo_area_code BETWEEN N'A' AND N'H' AND is_active = N'1') != 8 THROW 51101, N'03仓A-H货区方向配置数量异常。', 1; COMMIT TRANSACTION; END TRY BEGIN CATCH IF XACT_STATE() != 0 ROLLBACK TRANSACTION; THROW; END CATCH; SELECT warehouse_id, cargo_area_code, direction_type, is_active FROM dbo.bas_cargo_area_config WHERE warehouse_id = N'03' AND cargo_area_code BETWEEN N'A' AND N'H' ORDER BY cargo_area_code;