我在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
我有一个复制位置COPY_POS
的功能。
我想复制现有头寸两次,但要为每个头寸分配一个合适的头寸编号。
我运行GET_KEY
,然后COPY_POS
,然后GET_KEY
,然后COPY_POS
但是,位置表锁定。我几乎是积极的(这是合乎逻辑的),这是因为GET_KEY
和COPY_POS
之间存在冲突。 [只有在我尝试连续两次GET_KEY
和COPY_POS
时才会出现问题。
我尝试了什么......
我尝试在GET_KEY
和COPY_POS
中包含BEGIN TRAN
和COMMIT TRAN
中的每一个,但这不起作用。
整个存储过程包含在BEGIN TRY
和END TRY
中,我尝试将其删除,但这也无效...
有没有人有任何想法?
谢谢!
答案 0 :(得分:0)
只需在Select语句中添加WITH (nolock)
!
SELECT @v_position_no = max(POSITION_NO) + 0.01
FROM POSITIONS WITH (nolock) WHERE COMPANY_NO = @p_company_no