我可能通过同时运行SELECT和INSERT和SELECT来锁定我的SQL Server表

时间:2012-05-30 12:48:33

标签: sql-server-2008 sql-server-2008-r2

我在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_KEYCOPY_POS之间存在冲突。 [只有在我尝试连续两次GET_KEYCOPY_POS时才会出现问题。


我尝试了什么......

  1. 我尝试在GET_KEYCOPY_POS中包含BEGIN TRANCOMMIT TRAN中的每一个,但这不起作用。

  2. 整个存储过程包含在BEGIN TRYEND TRY中,我尝试将其删除,但这也无效...

  3. 有没有人有任何想法?

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

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