如何允许具有隔离级别序列化的插入

时间:2016-02-22 03:09:28

标签: sql-server

我有一个由多个线程使用的表。我的要求是我不希望任何其他用户在我指定的范围之间插入任何行。但是当应用(holdlock)提示时,sql server会对整个表进行锁定。 我的问题是

pending

- 这里我不希望任何其他用户在id 1和3之间插入或更新并记录。但是我现在不允许从另一个会话中插入任何行。如果我尝试插入一行,则会被阻止。即使我尝试更新ID = 4的行仍然被阻止。 该表在id列上具有聚簇索引,在列firstname,lastname上具有非聚簇索引。

1 个答案:

答案 0 :(得分:0)

一个有2列的表; [id]和[value]。 [id]列的类型为INT,[value]可以是356366.我可以阻止用户使用类似

之类的内容插入[id]在1和3之间的行
DECLARE @id INT = 1

INSERT INTO dbo.Table_1 (
id
,value
)
SELECT TOP 1 @id
,356366
FROM master.dbo.spt_values
WHERE @id NOT BETWEEN 1
    AND 3

或者,阻止他们使用

之类的内容进行更新
DECLARE @id INT = 1

UPDATE dbo.Table_1
SET [value] = 356366
WHERE id = @id
AND @id NOT BETWEEN 1
    AND 3