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

Sql server 如何允许具有隔离级别序列化的插入,sql-server,Sql Server,我有一个多线程使用的表。我的要求是,我不希望任何其他用户在我指定的范围之间插入任何行。但是,当应用(holdlock)提示时,sql server正在对整个表进行锁定。 我的问题是 begin transaction select id,firstname,lastname from dbo.emptable with (holdlock) where id between 1 and 3 --在这里,我不希望任何其他用户在id 1和3之间插入或更新和记录。但是,现

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

 begin transaction
    select id,firstname,lastname from dbo.emptable with (holdlock)    
    where id between 1 and 3 
--在这里,我不希望任何其他用户在id 1和3之间插入或更新和记录。但是,现在不允许我插入其他会话中的任何行。如果我尝试插入一行,它将被阻止。即使我尝试更新ID=4的行,它仍然被阻止。
该表在id列上具有聚集索引,在firstname、lastname列上具有非聚集索引

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

您是否尝试过使用
ROWLOCK
?AFAIK
HOLDLOCK
是一种表级锁定,因此在您的情况下,整个表都将被锁定。您提到的1到3之间的插入行应该被阻止。我知道您想要阻止不存在的行?我想要阻止行1、2和3。不应允许任何用户插入或更新这些行