我有一個表A(SQL Server 2008),其中包含最小和最大數字的集合。在我的其中一個存儲過程中,我使用此表連接產品表B,以查找介於最小值和最大值之間的可用產品編號,然後插入帶有此產品編號的新產品。所以我想要在最小/最大值之間的下一個免費號碼。我應該如何鎖定以避免重複數字
在找出下一個可用數字並插入產品行之間,我想鎖定以防止任何人找到相同的數字(並給出一個副本)。
我該如何看待這種情況?我是否應該在A表上獲得更新鎖定,即使我從不修改它?在我插入表B並且交易完成後,鎖應該被釋放?此更新鎖是否會阻止其他事務讀取表A?
編輯:最小/最大表格是不同產品系列的表格。根據你想要的系列,我想嘗試一下,找到這個序列中的可用編號。 productnr並不是獨一無二的,但它可以與第二列結合使用。簡化sp:
CREATE PROCEDURE [dbo].[InsertProduct]
(
@Param1 int,
@Param2 bit,
...
@Param20 int) AS
BEGIN
DECLARE @ProductNr int
--Here I do a query to determine which ProductNr I should have. Checking that the number is between max/min in the series and that no other product has this productnr.
--Now insert the row
INSERT INTO Products VALUES (@Param1, @ProductNr, ...., @Param2
END
列上沒有標識。在某些情況下可能會有重複。 – KTrum 2011-02-15 20:08:31
「產品」表中有多個產品具有相同的產品編號? – 2011-02-15 20:18:21