再问存储过程内的锁解决思路
再问存储过程内的锁
虽然给table1上锁了,但不影响同一事务本身里的操作,是这样吗?
------解决方案--------------------
测试了一下,不会影响,但是就你这个例子而言,前提是要等第一个select完毕之后后面才能操作,因为你这个锁是表级排它锁,同一个存储过程(可以理解为同一个事务)内,其他操作无法访问和操作这部分资源
CREATE PROCEDURE [dbo].[ToRecord9] @cSOCode VARCHAR(10)
AS
select * from table1 (with TABLOCKX)
BEGIN TRY
SET xact_abort ON
BEGIN TRAN
UPDATE table1 SET F1=0----上面那个锁不影响这里的更新操作吗?从目前事实上来看好像毫无影响,但这从理论上好像解释不通啊
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT CAST(@@TRANCOUNT AS CHAR(10)) + '捕获错误'
IF (@@TRANCOUNT > 0)
PRINT ERROR_MESSAGE()
ROLLBACK TRAN
END CATCH
虽然给table1上锁了,但不影响同一事务本身里的操作,是这样吗?
------解决方案--------------------
测试了一下,不会影响,但是就你这个例子而言,前提是要等第一个select完毕之后后面才能操作,因为你这个锁是表级排它锁,同一个存储过程(可以理解为同一个事务)内,其他操作无法访问和操作这部分资源