插入触发器标题和详细信息表后

时间:2014-03-05 14:10:46

标签: sql sql-server sql-server-2005 triggers

我有一个程序可以将订单捕获到两个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

1 个答案:

答案 0 :(得分:0)

我相信您的数据库中有两个插入流程 - 第一个是insert进入Header table,第二个是insertDetails table

如果您确实先插入标题,那么在您将文档的详细信息插入Db之前,触发器就会起作用。这就是SUM可以返回NULL

的原因