以下sql查询用于更新事务中的特定行。
BEGIN TRANSACTION;
Update [dbo].[StudentExamAttendanceDetails] SET StudentFeedBack = 1 Where Id = 4883174
COMMIT TRANSACTION;
问题是直到提交事务后,整个表仍处于锁定状态。因此,我无法同时从同一张表中选择任何数据。
出于测试目的,我跳过了COMMIT TRANSACTION;
部分运行了查询的以下部分:
BEGIN TRANSACTION;
Update [dbo].[StudentExamAttendanceDetails] SET StudentFeedBack = 1 Where Id = 4883174
与此同时,我运行了选择查询。由于整个表被锁定,因此选择查询无法选择任何数据。当我运行提交代码时:
COMMIT TRANSACTION;
在更新查询上,然后选择查询起作用。但是我试图在尚未提交更新事务时运行选择查询。这意味着我只想锁定要更新的行,而不是整个表。
所以我尝试了两种方法:
1. GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2. Update [dbo].[StudentExamAttendanceDetails] With(RowLock) SET StudentFeedBack = 1
Where Id = 4883174
但是这些方法都不起作用。整个表仍处于锁定状态,在提交事务之前,我无法从表中选择任何数据。
答案 0 :(得分:0)
使用
只是为了确保您正确获得它GO SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
或
WITH (NOLOCK)
与select语句有关,而不与更新有关。使用事务将导致整个表或所选行的锁定,具体取决于索引的存在。尝试确保正在运行的读取脚本中使用了WITH(NOLOCK)。