我有一个程序可以将订单捕获到两个SQL表中。一个是带有订单信息的标题表,其OrderID为自动增量PK。另一个是详细信息表,用于捕获vendor,part_number和quantity数据 我在头表上有一个后插入触发器,它假定用另一个数据库更新一个表,其中包含订单信息和该订单中的部件总数。 一切正常,除非触发器计算详细信息表中的部件总数。发生的事情是在将数据写入详细信息表之前触发器触发并始终为部件总数返回NULL。什么是最好的解决方法?我使用了错误的触发器吗?
OrderHeader Table
ID int
TransCode int
CustID int
StoreID int
Date datetime
OrderDetail
OrderID int
MFG nchar(3)
PartNumber nchar(35)
Qty int
ALTER TRIGGER [dbo].[trig_Update_PRIME]
on [Cleansweep].[dbo].[OrderHeader]
after insert
AS
BEGIN
declare @ID as int
declare @DateInput as date
declare @CustID as int
declare @transcode as int
declare @storeID as int
declare @TotItems as int
select @ID = (select ID from inserted)
select @DateInput = (select date from inserted)
select @CustID = (select CustID from inserted)
select @transcode = (select TransCode from inserted)
select @storeID = (select StoreID from inserted)
set @TotItems = ( select SUM(qty) FROM [Cleansweep].[dbo].[OrderDetail] where OrderID = @ID )
if @transcode = 0
begin
insert into PRIME.dbo.PRIME_RepCalls (Customer, Cores)
values (@CustID, @TotItems)
end
if @transcode = 1
begin
insert into PRIME.dbo.PRIME_RepCalls (Customer, NewReturns)
values (@CustID, @TotItems))
end
END
答案 0 :(得分:0)
我相信您的数据库中有两个插入流程 - 第一个是insert
进入Header table
,第二个是insert
到Details table
。
如果您确实先插入标题,那么在您将文档的详细信息插入Db之前,触发器就会起作用。这就是SUM
可以返回NULL