最近有一个朋友问我一个关于给查询操作强制上X锁却不阻塞的问题。该查询写在一个存储过程中,代码如代码1所示:

PROC [dbo].[GetCityOrders]
   2:     @city NVARCHAR(10) ,
INT
AS
ON
   6:  
BEGIN TRY
   8:  
TRAN
  10:  
TOP ( @num )
  12:                 id ,
  13:                 number ,
  14:                 price ,
  15:                 mid ,
  16:                 @city city
INTO    #cityorders
WITH ( XLOCK )
WHERE   prov = 0
AND status = 0
AND city = @city
  22:  
UPDATE  cmcc
SET     status = 100
SELECT  id
FROM    #cityorders )
  27:  
SELECT  o.* ,
  29:                 c.attach
FROM    #cityorders o
ON o.id = c.id
  32:  
TABLE #cityorders
  34:  
TRAN
  36:  
END TRY
BEGIN CATCH
  39:  
ROLLBACK
  41:  
END CATCH

相关文章: