SQL在添加新发票时更新库存
当我按照预期使用以下触发器更新当前库存时。但当我更新相同的值两次时,更新的值是错误的 50-2=48,但其显示为50-2=47SQL在添加新发票时更新库存,sql,sql-server,triggers,Sql,Sql Server,Triggers,当我按照预期使用以下触发器更新当前库存时。但当我更新相同的值两次时,更新的值是错误的 50-2=48,但其显示为50-2=47 ALTER TRIGGER [dbo].[trig_invoice_update] ON [dbo].[tblInvoice] AFTER INSERT AS BEGIN UPDATE p SET quantity = COALESCE(d.quantity, 0) - COALESCE(i.quantity, 0) FROM tblPur
ALTER TRIGGER [dbo].[trig_invoice_update]
ON [dbo].[tblInvoice]
AFTER INSERT
AS
BEGIN
UPDATE p
SET quantity = COALESCE(d.quantity, 0) - COALESCE(i.quantity, 0)
FROM tblPurchase p
LEFT JOIN
(SELECT i.itemName, SUM(i.quantity) AS quantity
FROM tblInvoice i
GROUP BY i.itemName) i ON p.itemName = i.itemName
LEFT JOIN
(SELECT d.itemName, SUM(d.quantity) AS quantity
FROM tblPurchase d
GROUP BY d.itemName) d ON p.itemName = d.itemName
WHERE d.quantity > 1
OR i.quantity > 1;
END
您试图从tblPurchase表格的数量中减去tblinvoice表格中所有可用数量的总和。相反,您只需要减去当前插入的数量。请尝试以下代码。希望你的问题能得到解决
ALTER TRIGGER [dbo].[trig_invoice_update]
ON [dbo].[tblInvoice]
AFTER INSERT
AS
BEGIN
UPDATE p
SET quantity = COALESCE(d.quantity, 0) - COALESCE(i.quantity, 0)
FROM tblPurchase p
LEFT JOIN
(SELECT itemName, quantity
FROM inserted i ) i ON p.itemName = i.itemName
LEFT JOIN
(SELECT d.itemName, SUM(d.quantity) AS quantity
FROM tblPurchase d
GROUP BY d.itemName) d ON p.itemName = d.itemName
WHERE d.quantity > 1
OR i.quantity > 1;
END
WHERE
子句不正确。正确的比较应该是0
,而不是1
:
WHERE d.quantity > 0 OR i.quantity > 0
或者,假设数量为整数,则应使用=
:
WHERE d.quantity >= 1 OR i.quantity >= 1
为了更好地理解您的问题,请共享表结构。不知何故,您应该在触发器中加入插入的
伪表,以了解插入了哪些行。。。。。。现在,你总是更新整个表!(即使只插入少数几行……)