SQL更新表,case when,选择distinct

问题描述 投票:0回答:1

我有如下2张桌子

表1:

r_report8

工作订单号 报告8a 报告_项目7
EGR220511003493 56 1

表2:

rjob_header

工作订单号 报告_项目7
EGR220511003493 1

我已经在两个表上设置了触发器

表1:

r_report8

DECLARE @workorderno nvarchar(15),@report_item7 int

SELECT @workorderno = WORK_ORDER_NO 
FROM inserted

IF (UPDATE(REPORT8A)) 
BEGIN
    UPDATE R_REPORT8 
    SET REPORT_ITEM7 = (CASE WHEN (REPORT8A<>'') THEN '1' ELSE '0' END)
    WHERE @workorderno = WORK_ORDER_NO 
END

表2:

rjob_header

DECLARE @workorderno nvarchar(15), @report_item7 int

SELECT @workorderno = WORK_ORDER_NO 
FROM inserted

UPDATE RJOB_HEADER 
SET REPORT_ITEM7 = (CASE 
                       WHEN (SELECT DISTINCT b.report_item7 
                             FROM rjob_header a 
                             INNER JOIN r_report8 b ON b.work_order_no = a.work_order_no 
                             WHERE a.work_order_no = @workorderno) IS NOT NULL 
                           THEN '1' 
                           ELSE '0' 
                    END)
    WHERE @workorderno = WORK_ORDER_NO 
END

2张表格将通过我们的系统表格同时更新。

(表1)dbo.r_report8.report8a 更新时。列 report_item7 将更改为“1”,并且(表 2)dbo.rjob_header.report_item7 也将更改为“1”

但是如果我删除(Table1)dbo.r_report8中的记录,则report_item7列仍然是'1'。

当从(Table1) dbo.r_report8,(Table2) dbo.rjob_header.report_item7 删除的记录变回'0'或null时,我该怎么办?

sql case distinct
1个回答
0
投票

您可以编写一个删除触发器,如下所示:

CREATE TRIGGER tr_r_report8_after_delete
ON dbo.r_report8
AFTER DELETE
AS
BEGIN
    DECLARE @workorderno nvarchar(15)

    SELECT @workorderno = WORK_ORDER_NO 
    FROM deleted

    -- Check if any related records exist in r_report8
    IF NOT EXISTS (SELECT 1 FROM r_report8 WHERE work_order_no = @workorderno)
    BEGIN
        -- Update rjob_header to set report_item7 to 0 
        UPDATE rjob_header
        SET report_item7 = 0 
        WHERE work_order_no = @workorderno
    END
END
© www.soinside.com 2019 - 2024. All rights reserved.