2

我在 SQL Server 2008 R2 中有一张表,其中包含不同公司的“职位”。

我有一个函数 GET_KEY,它通过在表上执行 SELECT MAX 创建一个位置编号。[我不能使用身份增量,因为职位编号需要是特定公司的第一个可用编号]

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

我有一个复制 position 的功能COPY_POS

我想复制现有职位两次,但要为每个职位分配一个适当的职位编号。

我跑GET_KEY,然后COPY_POS,然后GET_KEY,然后COPY_POS

但是,职位表会锁定。我几乎可以肯定(这是合乎逻辑的)这是因为GET_KEY和之间存在冲突COPY_POS。[只有当我尝试并GET_KEY连续COPY_POS两次时才会出现此问题]


我试过的...

  1. 我尝试将每个GET_KEYand包含COPY_POSBEGIN TRANand中COMMIT TRAN,但这没有用。

  2. 整个存储过程都包含在一个BEGIN TRYEND TRY我尝试删除它,但这也没有工作......

有没有人有任何想法?

谢谢!

4

1 回答 1

0

只需WITH (nolock)在 Select 语句中添加一个!

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 回答