我有一个商店程序来获取我想要的数据:
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命令从几个表中选择表吗?
请给我任何建议!
答案 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)”子句时锁定,它将起作用。
所以你可以根据你的问题把锁放在你想要的地方。