要求:编写触发器让其在更新或者删除表是删除对应库存表数据
问题是当我更新时并没有删除对应库存表数据
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没有赋值吧,像前边的一样,赋值一下