【发布时间】:2012-02-18 22:24:44
【问题描述】:
我正在尝试找出一种方法来创建用于从数据库中删除发票的存储过程。
三个表受到影响:
- INVOICE - 包含 InvoiceID、Date 和 CustomerID (fk)
- INVOICELINE - 包含 InvoicelineID、InvoiceID (fk)、ArticleID (fk)、数量、价格和折扣
-
ARTICLE - 包含带有文章名称、数量、价格和折扣的文章。
这就是我想要的:
- 您使用一个参数 InvoiceID 调用 SP
- 发票行中的项目编号将添加回“商品”表中,并添加到该项目的数量中。
- 发票上的所有发票行都被删除
- 发票已删除
以下是我目前所拥有的,它是用于删除发票行的 SP。我希望从名为 DeleteInvoice 的 SP 调用此 SP。问题是我不知道应该如何设计 SP 才能完成这项工作,例如,我如何遍历发票上的发票行?如果有人可以在这里提供帮助,我会很高兴。
删除发票行的SP(应从删除发票的SP调用,次数为发票行数):
@InvoiceID int
AS
BEGIN
DECLARE @Articleid int, @Quantity int
SELECT @Articleid = ArticleID, @Quantity=Quantity
FROM InvoiceLine
WHERE InvoiceID=@InvoiceID
BEGIN TRY
BEGIN TRAN
UPDATE Article SET Quantity=Quantity+@Quantity
WHERE ArtikelID=@Articleid;
DELETE FROM InvoiceLine
WHERE InvoiceLineID=@InvoiceLineID;
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
RAISERROR ('Couldn't delete the invoice line!',16,1)
END CATCH
END
【问题讨论】:
-
循环思维不会让您在 SQL 中走得更远。 SQL 旨在处理集合操作,例如更新发票中的所有行项目。它与大多数程序语言截然不同。
标签: sql sql-server stored-procedures