使用(UPDLOCK,READPAST)和ORDER BY - 不工作?

时间:2013-07-23 22:05:01

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

我正在尝试从我的数据库中选择代码,但在我有机会更新它们之前,我不需要另外一个人来选择相同的代码。我试过只使用updlock,这解决了我的重复销售问题,但它增加了死锁的问题。所以现在我正在使用(UPDLOCK,READPAST),这完全正常,直到我尝试在我的语句中使用ORDER BY。

Microsoft 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

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

1 个答案:

答案 0 :(得分: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

指定确定性样式
相关问题