加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:07:18 所属栏目:MsSql教程 来源:网络整理
导读:这个问题当然适用于更广泛的范围,但现在就是这样. 我有一个基本的电子商务应用程序,用户可以自然地下订单.所述订单需要有一个唯一的编号,我现在正试图生成. 每个订单都是特定于供应商的.基本上,我有一个OrderNumberInfo(VendorID,OrderNumber)表.现在,只要客
这个问题当然适用于更广泛的范围,但现在就是这样.

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

每个订单都是特定于供应商的.基本上,我有一个OrderNumberInfo(VendorID,OrderNumber)表.现在,只要客户下订单,我就需要为特定供应商增加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

现在,我已经阅读了关于选择…使用(updlock rowlock),悲观锁定等等,但是不能将所有这些都放在一个连贯的图片中:

>这些提示如何与SQL Server 2008s的快照隔离一起使用?
>他们是否执行行级,页级甚至表级锁?
>这如何容忍多个用户尝试为单个供应商生成数字?
>这里适合哪种隔离级别?
>一般而言 – 做这些事情的方法是什么?

编辑

只是为了让事情更清楚:

>在应用程序的这个特定角落的性能绝对不是问题:订单将相对不频繁地进行,并且将涉及对供应商的Web服务的昂贵调用,因此1秒延迟是相当容忍的
>我们确实需要让每个供应商的订单号都是独立和顺序的

解决方法

您的解决方案将在OrderNumberInfo表上创建潜在的性能瓶颈.

是否有任何特定原因导致订单不能简单地成为标识列,可能在应用程序端以供应商ID为前缀(例如MSFT-232323)?

这种方法的唯一缺点是每个供应商的订单不会是“Add-1-to-next-order-#”模式,但我不知道任何技术或业务考虑为什么会出现这种情况一个问题,虽然它可能使顺序处理稍微复杂一些.

它们仍然是每个供应商增加和唯一的,这是订单ID的唯一真正要求.

当然,它具有非常简单的独立于供应商的逻辑的额外好处,假设您有任何其他逻辑 – 例如应用程序范围的QC /报告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读