我不确定如何问这个问题,因此我将首先提供一个示例。
用户使用以下三种方式在发票上捕获了发票:
Item Qty UnitPrice
Item 1 3 $145
Item 2 2 $478
Item 3 4 $249
我在发票表上触发了一个触发AFTER INSERT
(据我所知)在插入过程中,一次仅插入一条记录。
即使在插入之前,我如何计算要插入的行数?
下面的代码是否足够?
SELECT COUNT(InvoiceID) FROM INSERTED WHERE INVOICENUMBER = '1234567'
感谢您的帮助。
答案 0 :(得分:0)
我设法解决了。
检查我做的以下测试:
创建表格:
create table TempTable (id int primary key identity, InvoiceID int, Item varchar(50), Qty float);
在此表上创建触发器:
create trigger ItemCount on TempTable
after insert
as
begin
select sum(t.qty) TotalQty from TempTable t join inserted i on t.InvoiceID = i.InvoiceID
end
将值插入此表中
insert into TempTable (InvoiceID, Item,Qty)
values (3,'Item1',3)
, (3,'Item2',2)
, (3,'Item3',4)
运行插入操作后,结果为27
,但实际上应该为9
。
发生这种情况的原因是由于Scsimon声明不使用JOIN
或WHERE
子句-如果删除该联接,我的结果也是9,但仅对首先插入,因为我需要每个InvoiceID的总和。
所以我更改了脚本并找到了正确的解决方案:
create trigger ItemCount on TempTable
after insert
as
begin
select sum(qty) TotalQty from inserted
end
使用上述方法,我得到了9
的总和。
感谢大家的帮助。