sql-server-2008 – 在SQL Server中生成订单号的正确方法
这个问题当然适用于更广泛的范围,但现在就是这样.
我有一个基本的电子商务应用程序,用户可以自然地下订单.所述订单需要有一个唯一的编号,我现在正试图生成. 每个订单都是特定于供应商的.基本上,我有一个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 /报告. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |