set nocount on; set xact_abort on; /* 货区出入库方向: 1 从小到大 2 从大到小 3 两端均可 */ begin try begin transaction; if object_id(N'dbo.bas_cargo_area_config', N'U') is null begin create table dbo.bas_cargo_area_config ( id bigint identity(1, 1) not null, warehouse_id nvarchar(80) not null, cargo_area_code nvarchar(10) not null, cargo_area_name nvarchar(80) not null, direction_type nvarchar(2) not null, is_active nchar(1) not null constraint DF_bas_cargo_area_config_active default N'1', create_by nvarchar(64) null, create_time datetime2(3) null, update_by nvarchar(64) null, update_time datetime2(3) null, remark nvarchar(500) null, constraint PK_bas_cargo_area_config primary key clustered (id), constraint UQ_bas_cargo_area_config unique (warehouse_id, cargo_area_code), constraint CK_bas_cargo_area_config_direction check (direction_type in (N'1', N'2', N'3')), constraint CK_bas_cargo_area_config_active check (is_active in (N'0', N'1')) ); alter table dbo.bas_cargo_area_config with check add constraint FK_bas_cargo_area_config_warehouse foreign key (warehouse_id) references dbo.bas_warehouse(warehouse_id); end; update dbo.bas_cargo_space set this_cargo_area = nchar(unicode(N'A') + try_convert(int, this_cargo_area) - 1) where warehouse_id = N'03' and try_convert(int, this_cargo_area) between 1 and 8; declare @area table ( cargo_area_code nvarchar(10) not null primary key, direction_type nvarchar(2) not null ); insert into @area(cargo_area_code, direction_type) values (N'A', N'1'),(N'B', N'1'),(N'C', N'1'),(N'D', N'2'), (N'E', N'1'),(N'F', N'2'),(N'G', N'2'),(N'H', N'2'); update target set target.direction_type = source.direction_type, target.is_active = N'1', target.update_by = N'admin', target.update_time = sysdatetime(), target.remark = N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小' from dbo.bas_cargo_area_config target inner join @area source on source.cargo_area_code = target.cargo_area_code where target.warehouse_id = N'03'; insert into dbo.bas_cargo_area_config ( warehouse_id, cargo_area_code, cargo_area_name, direction_type, is_active, create_by, create_time, remark ) select N'03', a.cargo_area_code, a.cargo_area_code + N'货区', a.direction_type, N'1', N'admin', sysdatetime(), N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小' from @area a where not exists ( select 1 from dbo.bas_cargo_area_config c where c.warehouse_id = N'03' and c.cargo_area_code = a.cargo_area_code ); declare @letter_area_count int = ( select count(*) from dbo.bas_cargo_space where warehouse_id = N'03' and this_cargo_area between N'A' and N'H' ); if @letter_area_count <> 1028 throw 51030, N'03仓A-H货区货位数量异常,预期1028。', 1; if exists ( select 1 from dbo.bas_cargo_space where warehouse_id = N'03' and this_cargo_area is not null and this_cargo_area not in (N'A', N'B', N'C', N'D', N'E', N'F', N'G', N'H') ) throw 51031, N'03仓仍存在非A-H货区编码。', 1; declare @config_count int = ( select count(*) from dbo.bas_cargo_area_config where warehouse_id = N'03' and cargo_area_code in (N'A', N'B', N'C', N'D', N'E', N'F', N'G', N'H') ); if @config_count <> 8 throw 51032, N'03仓货区方向配置数量异常,预期8。', 1; commit transaction; end try begin catch if xact_state() <> 0 rollback transaction; throw; end catch; select c.warehouse_id, c.cargo_area_code, c.cargo_area_name, c.direction_type, case c.direction_type when N'1' then N'从小到大' when N'2' then N'从大到小' when N'3' then N'两端均可' end as direction_name, c.is_active, count(bcs.cargo_space_id) as cargo_space_count from dbo.bas_cargo_area_config c left join dbo.bas_cargo_space bcs on bcs.warehouse_id = c.warehouse_id and bcs.this_cargo_area = c.cargo_area_code where c.warehouse_id = N'03' group by c.warehouse_id, c.cargo_area_code, c.cargo_area_name, c.direction_type, c.is_active order by c.cargo_area_code;