SQLite如何获得条件列更新的结果?

时间:2016-03-11 01:07:43

标签: c# sqlite

所以我在ASP.NET Core中使用SQLite为我的存储库构建一个准系统电子商务站点。我用我正在调用的“产品库存”来跟踪我商店中产品的库存情况。持有的表有一个名为' Stock'的整数列。现在我从不希望库存为负数,因此即使我在更新查询之前检查了软件,但仍有可能两个用户大致同时检出,导致两个更新查询可能导致否定。所以我想我使用case语句来确定要减去多少。这是我到目前为止所提出的。

UPDATE [ProductInventory] 
SET [Stock] = CASE WHEN [Stock] >= X Then [Stock] - X Else [Stock] = 0
END WHERE [ID] = 1

在上面的示例中,X是占位符,表示我希望从Stock列中扣除的金额。

我无法弄清楚如何获取有关扣除多少的信息?我的猜测是我在这里使用了错误的SQL查询,或者我的想法完全错误,我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我认为你正在咆哮错误的树,老板。使用数据库事务会好得多。在事务中,您可以对多个SQL语句进行分组;所有语句一起执行,它们都一起成功或者被回滚。这里有一些C#伪代码:

using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
  conn.Open();
  using SQLiteTransaction dbTransaction = conn.BeginTransaction())
  {
    if (StockIsAvailable())
    {
      DecreaseStock();
      IncreaseCashBalance();
    }
    dbTransaction.Commit();
  }
}

在我的示例中,StockIsAvailable()DecreaseStock()IncreaseCashBalance()是在数据库上执行SQL语句的函数。我的观点是,如果您要使用交易,那么如果您在第一个电子商务交易中间发生另一个电子商务交易,则第二个电子商务交易必须等到第一个数据库交易提交。数据库不可能处于无效状态,例如负数量的库存。

祝你的电子商务网站好运!