sql server删除触发表以外的表数据

要求:编写触发器让其在更新或者删除表是删除对应库存表数据

问题是当我更新时并没有删除对应库存表数据

USE [UFDATA_038_2022]
GO
/****** Object:  Trigger [dbo].[gc_kc]    Script Date: 2023-01-16 11:21:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[gc_kc] 
   ON  [dbo].[rdrecords01]
   for UPDATE,DELETE
AS 
BEGIN
    DECLARE @ID int      
    DECLARE @cCode varchar(50)
    DECLARE @cInvCode varchar(50)           --存货编码
    --获取结算id
    select @ID = AutoID   from deleted 
    
    select @cCode=r1.cCode from RdRecord01 r1 inner join rdrecords01 r2 on r1.ID=r2.ID where r2.AutoID=@ID

    delete from kc where cCode=@cCode and cInvCode=@cInvCode

    if exists(select 1 from inserted)
    begin
        update RdRecord01 set cDefine9=null where ID=(select ID  from Inserted)
    end
END

看起来你的触发器试图在更新或删除rdrecords01表时删除kc表中对应的数据。 但是,你没有在触发器中获取并使用cInvCode变量。 因此,在删除语句中,@cInvCode变量始终是NULL,导致删除语句不能删除任何数据。 你需要添加一个语句来获取cInvCode变量的值,并将其用于删除语句中。

例如:

select @cInvCode = cInvCode from rdrecords01 where AutoID = @ID
delete from kc where cCode = @cCode and cInvCode = @cInvCode

这样就能删除对应的库存表数据了。

后边cInvCode没有赋值吧,像前边的一样,赋值一下

img