【问题标题】:How to update the records of multiple tables of a database,while modifying in any one table of that database如何更新数据库的多个表的记录,同时在该数据库的任何一个表中进行修改
【发布时间】:2011-03-01 05:38:41
【问题描述】:

我正在创建一个基于医疗库存的 C# Windows 应用程序。在这个应用程序中,我主要有三个表单,即 PurchaseDetail、SalesDetail 和 StockDetail。

现在我想要一个功能,如果我在 PurchaseDetail 或 SalesDetail 中插入或修改记录,StockDetail 中的数据也应该被修改。(例如,如果我在 PurchaseDetail 中插入一些药物,那么该药物的数量在 StockDetail 中也应该修改并与 SalesDetail 相同)

PurchaseDetail 中的列:Id(主键和自增 int)、BatchNumber、ProductName、ManufacturingDate、ExpiryDate、Rate、MRP、Tax、Discount、Quantity

SalesDetail 中的列:Id(PrimaryKey 和自增 int)、BillNumber、CustomerName、BatchNumber、Quantity、Rate、SalesDate

StockDetail 中的列:Id(主键和自增 int)、ProductId、ProductName、OpeningStock、ClosingStock、PurchaseQty、DispenseQty、PurchaseReturn、DispenseReturn

请帮助我提供任何合适的示例或代码

【问题讨论】:

    标签: c# .net-3.5


    【解决方案1】:

    您可以轻松编写多个用分号“;”分隔的 SQL 语句

    示例:

    INSERT INTO PurchaseDetail (BatchNumber, ProductID, Quantity) VALUES (@BatchNumber, @ProductID, @Quantity);
    INSERT INTO StockDetail (ProductID, ProductName, OpeningStock, ClosingStock, PurchaseQty, DispenseQty, PurchaseReturn,DispenseReturn) SELECT ProductID, ProductName, ClosingStock, ClosingStock + @Quantity, @Quantity, 0, 0, 0 FROM StockDetail WHERE ProductID = @ProductID AND ID = (SELECT TOP 1 ID FROM StockDetail WHERE ProductID = @ProductID ORDER BY ID)
    

    而且您真的不应该在每个表中重新存储产品名称。相反,您应该存储 ProductID。您的 SalesDetails 没有说明销售的是哪种产品。

    以下是更规范化的建议架构:

    产品(ID、产品名称、库存) PurchaseDetail (ID, BatchID, ProductID, Quantity, ...) SalesDetail(ID、BillID、ProductID、数量...) 购买批次(ID、购买日期) SalesBill(ID、SalesDate、CustomerID)

    如果您需要知道特定时间段的开、关、购买和分发,您可以随时运行 SQL:

    当前库存:

    SELECT Stock FROM Product WHERE ID = @ProductID
    

    从@StartDate 到@EndDate 购买:

    SELECT SUM(Quantity) FROM PurchaseDetail INNER JOIN PurchaseBatch ON PurchaseDetail.BatchID = PurchaseBatch.ID WHERE PurchaseBatch.PurchaseDate >= @StartDate AND PurchaseBatch.PurchaseDate < @EndDate AND PurchaseDetail.ProductID = @ProductID
    

    从@StartDate 到@EndDate 销售:

    SELECT SUM(Quantity) FROM SalesDetail INNER JOIN SalesBill ON SalesDetail.BillID = SalesBill.ID WHERE SalesBill.SalesDate >= @StartDate AND SalesBill.SalesDate < @EndDate AND SalesDetail.ProductID = @ProductID
    

    从@EndDate 购买到现在:

    SELECT SUM(Quantity) FROM PurchaseDetail INNER JOIN PurchaseBatch ON PurchaseDetail.BatchID = PurchaseBatch.ID WHERE PurchaseBatch.PurchaseDate >= @EndDate AND PurchaseDetail.ProductID = @ProductID
    

    从@EndDate 销售到现在:

    SELECT SUM(Quantity) FROM SalesDetail INNER JOIN SalesBill ON SalesDetail.BillID = SalesBill.ID WHERE SalesBill.SalesDate > @EndDate AND SalesDetail.ProductID = @ProductID
    

    因此,

    从@StartDate 到@EndDate = 当前库存 - 从@StartDate 购买到@EndDate - 从@EndDate 购买到现在 + 从@StartDate 到@EndDate 的销售额 + 从@EndDate 到现在的销售额

    从@StartDate 到@EndDate = 当前库存 - 从@EndDate 购买到现在 + 从@EndDate 到现在的销售额

    你还有 从@StartDate 到@EndDate 的销售额 从@StartDate 到@EndDate 购买

    【讨论】:

      【解决方案2】:

      尝试使用Triggers.

      【讨论】:

      • 您可以在存储过程中使用Transaction,并在事务中执行更新以避免数据不一致。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多