Sql server 在SQL Server Express 2014中插入时锁定

Sql server 在SQL Server Express 2014中插入时锁定,sql-server,locking,transaction-isolation,Sql Server,Locking,Transaction Isolation,我有一个表,其列名为Time,类型为datetime2 我需要运行整个查询,而不让任何其他人在执行时读取或更改表中的数据 如果不存在,则从预订中选择Id,其中时间>='2016-02-02 09:00:00'和时间

我有一个表,其列名为Time,类型为datetime2

我需要运行整个查询,而不让任何其他人在执行时读取或更改表中的数据

如果不存在,则从预订中选择Id,其中时间>='2016-02-02 09:00:00'和时间<'2016-02-02 11:00:00' 开始 -插入一些数据 结束

该查询位于asp.NET应用程序中的事务内部,但我不确定这是否足够。我需要应用锁定提示还是设置隔离级别?如果是的话,我会怎么做


我读过关于TABLOCK的文章,它似乎在做我想做的事情,但它是不是矫枉过正了?我在哪里指定整个查询需要TABLOCK,而不仅仅是select语句?

因此您不希望任何其他事务插入时间值介于“2016-02-02 09:00:00”和“2016-02-02 11:00:00”之间的行。您不应该使用TABLOCK,因为这将在整个表上放置共享锁。这样做将不允许插入、更新和删除其他事务。你只想封锁时间范围。在select语句中使用table hint-Holdlock-

    IF NOT EXISTS (SELECT Id FROM Bookings with (holdlock)
    WHERE Time >= '2016-02-02 09:00:00' AND Time < '2016-02-02 11:00:00') 
      BEGIN 
      -- Insert some data 
      END