2

SQL Server 2008 R2 に、さまざまな企業の「ポジション」を保持するテーブルがあります。

テーブルに対して SELECT MAX を実行して位置番号を作成する関数 GET_KEY があります。[ポジション番号は特定の会社で最初に使用可能な番号である必要があるため、Identity Increment を使用できません]

SELECT @v_position_no = max(POSITION_NO) + 0.01 
FROM POSITIONS WHERE COMPANY_NO = @p_company_no 

位置をコピーする機能がありますCOPY_POS

既存の位置を 2 回コピーしたいのですが、それぞれの位置に適切な位置番号を割り当てたいです。

私は走るGET_KEY、そしてCOPY_POS、そしてGET_KEY、そしてCOPY_POS

ただし、位置テーブルはロックされます。GET_KEYこれは と の間に競合があるためであると私はほぼ確信しています (そして論理的です) COPY_POSGET_KEY[この問題は、COPY_POS2 回連続して試行した場合にのみ発生します]


私が試したこと...

  1. GET_KEYと のそれぞれをとCOPY_POSで囲んでみましたが、うまくBEGIN TRANいきCOMMIT TRANませんでした。

  2. ストアド プロシージャ全体が and に含まれてBEGIN TRYおりEND TRY、これを削除しようとしましたが、これも機能しませんでした...

誰にもアイデアはありますか?

ありがとうございました!

4

1 に答える 1

0

WITH (nolock)Select ステートメントに a を追加するだけです。

SELECT @v_position_no = max(POSITION_NO) + 0.01 
FROM POSITIONS WITH (nolock) WHERE COMPANY_NO = @p_company_no
于 2012-05-30T12:57:32.707 に答える