插入前计算来自相同InvoiceID的行

时间:2019-01-14 17:38:19

标签: sql-server tsql

我不确定如何问这个问题,因此我将首先提供一个示例。

用户使用以下三种方式在发票上捕获了发票:

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'

感谢您的帮助。

1 个答案:

答案 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声明不使用JOINWHERE子句-如果删除该联接,我的结果也是9,但仅对首先插入,因为我需要每个InvoiceID的总和。

所以我更改了脚本并找到了正确的解决方案:

create trigger ItemCount on TempTable
after insert
as
begin
select sum(qty) TotalQty from inserted
end

使用上述方法,我得到了9的总和。

感谢大家的帮助。