2010-04-05 3 views
0

나는 내가 원하는 데이터를 얻을 수있는 저장 프로 시저가 : 내가 커서로 레코드를 얻을 후ROWLOCK, UPDLOCK을 사용하여 조인 SQL 구문에서 레코드를 잠글 수 있습니까?

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 [email protected] and [email protected]) AND d.CusGrp = @CusGrp 

을, 나는 모든 관련 송장 번호를 잠글 ROWLOCK, UPDLOCK을 사용했다. =

은 내가 내 가게 절차에서 join 명령을 사용하여 몇 개의 테이블에서 테이블을 선택 시점에서 테이블 INVH에 잠금 발행 할 수 InvNum Invh WITH (ROWLOCK, UPDLOCK)로부터 SELECT InvNum?

아무쪼록!

+0

2 개의 질문이 있습니다. 왜 커서를 사용하고 있습니까? 그리고 어떤 RDBMS를 사용하고 있습니까? – IamIC

답변

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)"절을 넣으면 잠금이 작동합니다.

자물쇠는 질문에 따라 원하는 곳에 둘 수 있습니다.

관련 문제