我可以使用ROWLOCK,UPDLOCK从连接sql语句中锁定记录吗?

时间:2010-04-05 07:23:38

标签: sql rowlocking

我有一个商店程序来获取我想要的数据:

SELECT  a.SONum, a.Seq1, a.SptNum, a.Qty1, a.SalUniPriP, a.PayNum, a.InvNum, 
a.BLNum, c.ETD, c.ShpNum,  f.IssBan
FROM OrdD a JOIN OrdH b ON a.SONum = b.SONum  
LEFT JOIN Invh c ON a.InvNum = c.InvNum 
LEFT JOIN cus d ON b.CusCod = d.CusCod  
LEFT JOIN BL e ON a.BLNum = e.BLNum
LEFT JOIN PayMasH f ON f.PayNum = a.PayNum
LEFT JOIN Shipment g ON g.ShpNum = c.ShpNum  
WHERE b.CusCod IN (SELECT CusCod FROM UsrInc WHERE UseID=@UserID and UseLev=@UserLvl) AND d.CusGrp = @CusGrp

我将这些记录放入光标后,我使用RowLock,UpdLock来锁定所有相关的发票号码。 SELECT InvNum FROM Invh WITH(ROWLOCK,UPDLOCK)WHERE InvNum =

我可以在表INVH上发出锁定我在我的商店程序中使用join命令从几个表中选择表吗?

请给我任何建议!

1 个答案:

答案 0 :(得分:0)

是的,您可以,只要正确格式化SQL即可。您需要的一般模式如下:

BEGIN TRAN

SELECT    *
FROM      table_1 AS t1 {WITH (UPDLOCK, ROWLOCK)}
JOIN      table_2 AS t2 {WITH (UPDLOCK, ROWLOCK)}
ON        t1.a = t2.a

COMMIT TRAN   -- locking ends here

其中{}是可选的(省略{})。因此,当您在要锁定的每个表上放置“WITH(UPDLOCK,ROWLOCK)”子句时锁定,它将起作用。

所以你可以根据你的问题把锁放在你想要的地方。