IF OBJECT_ID(N'[dbo].[proc_hand_delete_in_job]', N'P') IS NOT NULL DROP PROCEDURE [dbo].[proc_hand_delete_in_job] GO CREATE PROCEDURE [dbo].[proc_hand_delete_in_job] @v_job_id varchar(80), @v_result int OUTPUT, @v_resultmsg varchar(500) OUTPUT AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @v_tray_code varchar(255); DECLARE @v_cargo_space_id varchar(80); BEGIN TRY IF @v_job_id IS NULL OR LTRIM(RTRIM(@v_job_id)) = '' BEGIN SET @v_result = 0; SET @v_resultmsg = '作业ID不能为空'; RETURN; END SELECT TOP 1 @v_tray_code = tray_code, @v_cargo_space_id = cargo_space_id FROM dbo.mydo_job WHERE job_id = @v_job_id AND in_or_out = 1; IF @v_tray_code IS NULL AND @v_cargo_space_id IS NULL BEGIN SET @v_result = 0; SET @v_resultmsg = '未找到对应入库作业'; RETURN; END BEGIN TRANSACTION; ;WITH detail_qty AS ( SELECT COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) AS stockin_detail_id, SUM(ISNULL(in_quantity, 0)) AS rollback_qty FROM dbo.mydo_job_detail WHERE job_id = @v_job_id AND COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) IS NOT NULL GROUP BY COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) ) UPDATE d SET d.scan_num = CASE WHEN ISNULL(d.scan_num, 0) - q.rollback_qty < 0 THEN 0 ELSE ISNULL(d.scan_num, 0) - q.rollback_qty END FROM dbo.in_stockin_detail d INNER JOIN detail_qty q ON d.stockin_detail_id = q.stockin_detail_id; UPDATE dbo.bas_cargo_space SET status = '1', locked = 'N', tray_code = NULL WHERE cargo_space_id = @v_cargo_space_id OR (tray_code = @v_tray_code AND status = '3' AND locked = 'Y'); DELETE FROM dbo.mydo_job_detail WHERE job_id = @v_job_id; DELETE FROM dbo.mydo_job WHERE job_id = @v_job_id AND in_or_out = 1; COMMIT TRANSACTION; SET @v_result = 10; SET @v_resultmsg = '入库作业已作废'; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SET @v_result = 0; SET @v_resultmsg = ERROR_MESSAGE(); END CATCH END GO