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_POS
。GET_KEY
[この問題は、COPY_POS
2 回連続して試行した場合にのみ発生します]
私が試したこと...
GET_KEY
と のそれぞれをとCOPY_POS
で囲んでみましたが、うまくBEGIN TRAN
いきCOMMIT TRAN
ませんでした。ストアド プロシージャ全体が and に含まれて
BEGIN TRY
おりEND TRY
、これを削除しようとしましたが、これも機能しませんでした...
誰にもアイデアはありますか?
ありがとうございました!