在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行。其实这个问题只适合研究一下,实际意义并不大,因为找到、定位被锁定的行的代价开销较大,而意义却不怎么大,而且使用场景也很少。那么下面我们来探讨、研究一下这个问题吧:
在会话窗口(会话ID=65)下执行下面SQL语句,模拟SQL Server使用行锁锁定某一行记录:
USE AdventureWorks2012;
GO
SELECT @@SPID;
BEGIN TRAN;
UPDATE [dbo].[DatabaseLog] WITH ( ROWLOCK )
SET TSQL = N'dddd'
WHERE DatabaseLogID = 1;
--ROLLBACK;