如何在没有IDENTITY的情况下在Azure SQL中创建顺序自动编号字段?

时间:2015-05-25 11:35:14

标签: sql-server azure azure-sql-database

我尝试了各种各样的事情,但到目前为止我还没有找到解决办法......

我们有一个带有OrderID字段的Orders表,该字段当前是IDENTITY值。这对我的客户造成了问题,因为虽然ID大多是顺序的,但偶尔会有大量的1000个ID跳转。我对此进行了研究,发现它是一个"功能" SQL,我在Azure上无能为力。

因此我想自己分配OrderId值,但这说起来容易做起来难。订单来自多个来源,包括多线程导入程序,所以我有并发问题需要处理。

我尝试过使用事务和表锁的存储过程,但是当我调用SaveChanges()(在Entity Framework中)时,我仍然会遇到外键冲突。

{{1}}

我迷失了下一步的尝试......

1 个答案:

答案 0 :(得分:1)

  

外键违规

我希望你的意思是“主键”,因为外键违规与此问题无关......

TABLOCK是一个可共享的读锁定。使用TABLOCKX进行快速修复。

我认为您应该使用UPDLOCK, ROWLOCK, HOLDLOCK这是一个众所周知的标准锁定提示序列。

请注意,您根本不需要使用sprocs。您只需执行语句

    SELECT MAX(OrderId)
    FROM orders.Orders
    WITH (UPDLOCK, ROWLOCK, HOLDLOCK)

并丢弃结果。然后,正确的锁定,您可以使用正常的EF功能继续。