1

データベース テーブルから INT を取得し、それを 1 増やしてから古い値を返す必要があるというシナリオがあります。ストアド プロシージャがすぐに再度呼び出された場合、返される値 (NextBookingId) が、ストアド プロシージャの最初の呼び出しによって返される値と同じではないことを確認する必要があります。

私は以下のコードを使用しており、それが機能していると想定していましたが、ストアド プロシージャの 2 つの別個の即時呼び出しが同じ値を返しているように見えるため、今まで適切にテストされておらず、機能していないようです。 .

DECLARE @NextBookingId INT

UPDATE Company WITH (ROWLOCK)
SET  @NextBookingId = (NextBookingId),
     NextBookingId = (NextBookingId + 1)
WHERE CompanyId = @CompanyId 

SELECT 
    CompanyId
,   @NextBookingId AS NextBookingId
FROM Company
WHERE CompanyId = @CompanyId

これはトランザクションにラップする必要がありますか? CompanyId 主キーにクラスター化インデックスがあります。

4

0 に答える 0