【发布时间】:2011-06-22 18:36:31
【问题描述】:
我有一个表,其中有一列名为“Is_Locked”。
我打开 2 个 SSMS 并在每个 SSMS 中使用此脚本创建一个新查询:
BEGIN TRAN Nima1
BEGIN TRY
DECLARE @a INT
SELECT @a=COUNT(*)
FROM dbo.Siahe WITH(XLOCK,ROWLOCK)
WHERE TedadDaryaii=8
AND Is_Locked=1
IF @a = 0
BEGIN
UPDATE Siahe
SET Is_Locked = 1
WHERE ShMarja = 9999
END
COMMIT TRAN Nima1
END TRY
BEGIN CATCH
ROLLBACK TRAN Nima1
END CATCH
但如果所有 Is_Lock 字段为 false,则查询执行和 Select 语句都不会独占锁定行。
为什么?
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-server-2008 transactions