C# 来自多用户的调用过程

C# 来自多用户的调用过程,c#,sql-server,sql-server-2012,C#,Sql Server,Sql Server 2012,我已经想出了一个方案,我真的很挣扎。请帮我做这件事。我在下面有一个表,存储过程在c中单击按钮调用这个表,数据源被分配给网格 Id Product QtyReceive QtyDispatch Location 1 HP2030 20 0 A 下面是点击事件调用的过程,它只是从特定位置选择我们需要的产品数量 DECLARE @Data TABLE ( Id int iden

我已经想出了一个方案,我真的很挣扎。请帮我做这件事。我在下面有一个表,存储过程在c中单击按钮调用这个表,数据源被分配给网格

Id    Product   QtyReceive  QtyDispatch  Location
1      HP2030     20            0          A
下面是点击事件调用的过程,它只是从特定位置选择我们需要的产品数量

        DECLARE @Data TABLE
         (
         Id int identity(1,1)
        , Product varchar(10)
        , QtyReceive  int
        , QTYDispatch int
        , Location varchar(10)
        )
        DECLARE @Qty int = 10

        INSERT @Data VALUES
        ('HP2030', 20 ,5,'A');

        WITH sumqty AS 
        (
         SELECT *, SUM(QtyReceive -QTYDispatch) OVER (PARTITION BY Product ORDER BY Id) AS TotalQty FROM @Data
        )
        ,takeqty AS (
        SELECT *, 
        CASE 
          WHEN @Qty >= TotalQty THEN QtyReceive
          ELSE @Qty - ISNULL(LAG(TotalQty) OVER (PARTITION BY Product ORDER BY Id), 0)
        END AS TakeQty
        FROM sumqty
        )
        SELECT 
                Product
            ,   TotalQty
            ,   TakeQty
            ,   Location
        FROM takeqty WHERE TakeQty > 0
        ORDER BY Location;
现在有一个问题,假设两个用户坐在两台不同的计算机上,用户1需要10个数量,另一个用户需要5个数量。他们点击按钮同时获取数量并同时保存,发货数量更新为数量10,而不是10+5=15。当两个用户同时点击save时会发生这种情况。用户数量不能变化。这个问题有什么解决办法吗


我试图了解整个情况

寻找timestap。其思想是选择时间戳,并在更新时检查时间点是否相等。如果相等,则更新,其他人已更新并引发异常。如何保存数据?从技术上讲,您应该为每个用户插入一条记录。每次保存一条记录并更新它不是一个好主意。或者按照上面的注释使用timestamp或rowversion字段来管理并发性。我正在处理仓储系统,在我的情况下,一条记录可以由多个用户更新,因为您可以在上面的场景中看到,他们所需的数量在一行中可用。您需要在流程中具有一些事务性,而事实并非如此看起来您列出了存储在数据库中的值所在的部分,而这正是您遇到麻烦的地方。请提供更多代码。我们可以在特定过程调用中使用事务吗?