1

必要なデータを取得するためのストアド プロシージャがあります。

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ストア プロシージャで結合コマンドを使用していくつかのテーブルからテーブルを選択した時点で、テーブルをロックできますか?

アドバイスをお願いします。

4

1 に答える 1

1

はい、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)たい各テーブルに " " 句を入れるとロックされ、機能します。

したがって、質問に従って、必要な場所にロックを配置できます。

于 2011-01-05T20:59:45.200 に答える