【问题标题】:Using (UPDLOCK, READPAST) and ORDER BY - Not Working?使用 (UPDLOCK, READPAST) 和 ORDER BY - 不工作?
【发布时间】:2013-07-23 22:05:01
【问题描述】:

我正在尝试从我的数据库中选择代码,但在我有机会更新它们之前,我不需要其他人来选择相同的代码。我曾尝试仅使用 updlock,这解决了我的重复销售问题,但它增加了死锁问题。所以现在我正在使用 (UPDLOCK, READPAST),在我尝试在我的语句中使用 ORDER BY 之前,它工作得非常好。

微软 SQL 2005

BEGIN TRANSACTION

SELECT Top 10 ID FROM dbo.CODES 
with (UPDLOCK, READPAST)
where ItemNo = 'type-2' AND Sold = 0 
order by cast(NowStamp as DateTime) ASC

COMMIT TRANSACTION

我觉得我的问题将来自索引。

【问题讨论】:

  • 当我尝试在事务中使用 ORDER BY 时,它会锁定整个表并且不允许运行相同的事务。

标签: sql sql-server-2005 sql-order-by


【解决方案1】:

这是一个与ORDER BY and WITH(ROWLOCK, UPDLOCK, READPAST)非常相似的问题

答案描述您还需要 ROWLOCK 和索引。不幸的是,您无法在该列上创建索引,因为 CAST 将其视为不确定的(请参阅http://msdn.microsoft.com/en-us/library/ms189292(v=sql.90).aspx 上的第一个注释)。

您应该使用 CONVERT 并从以下位置指定确定性样式:http://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多