gpt4 book ai didi

sql-server-2008 - 在 SQL Server 中生成订单号的正确方法

转载 作者:行者123 更新时间:2023-12-04 12:01:06 24 4
gpt4 key购买 nike

这个问题当然适用于更广泛的范围,但在这里。

我有一个基本的电子商务应用程序,用户可以很自然地在其中下订单。所述订单需要有一个唯一编号,我现在正在尝试生成该编号。

每个订单都是特定于供应商的。基本上,我有一个 OrderNumberInfo (VendorID, OrderNumber) table 。现在,每当客户下订单时,我都需要增加 OrderNumber对于特定的供应商并返回该值。自然,我不希望其他进程干扰我,所以我需要以某种方式专门锁定这一行:

begin tranaction

declare @n int
select @n = OrderNumber
from OrderNumberInfo
where VendorID = @vendorID

update OrderNumberInfo
set OrderNumber = @n + 1
where OrderNumber = @n and VendorID = @vendorID

commit transaction

现在,我已经阅读了 select ... with (updlock rowlock) ,悲观锁定等,但不能将所有这些放在一个连贯的图片中:
  • 这些提示如何与 SQL Server 2008s 的快照隔离配合使用?
  • 它们是否执行行级、页级甚至表级锁?
  • 这如何容忍多个用户尝试为单个供应商生成数字?
  • 什么隔离级别在这里合适?
  • 一般来说 - 做这些事情的方法是什么?

  • 编辑

    只是为了让一些事情更清楚:
  • 应用程序这个特定角落的性能绝对不是问题:订单将相对较少下达,并且会涉及对供应商网络服务的昂贵调用,因此 1 秒延迟是可以容忍的
  • 我们真的需要让每个供应商的订单号独立且连续
  • 最佳答案

    您的解决方案将在 OrderNumberInfo 上造成潜在的性能瓶颈。 table 。

    订单不能简单地作为身份列,可能在应用程序端以供应商 ID 为前缀(例如 MSFT-232323)是否有任何具体原因?

    这种方法的唯一缺点是每个供应商的订单不会是“添加 1 到获取下一个订单-#”模式,但我不知道为什么会出现任何技术或业务考虑一个问题,尽管它可能会使按顺序处理的顺序稍微复杂一些。

    它们仍然会增加并且每个供应商都是唯一的,这是订单 ID 的唯一真正要求。

    当然,假设您曾经拥有任何独立于供应商的逻辑,它当然会具有额外的附带好处——例如应用程序范围的 QC/报告。

    关于sql-server-2008 - 在 SQL Server 中生成订单号的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990883/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com