当我在 SQL Server Management Studio 中右键单击表并选择“编辑前 200 行”时,我正在查看的数据会在什么时候被锁定?
我的一位同事表示,以这种方式查看数据时,可以锁定数据行(我想当他说如果您将光标放在一行上并开始编辑数据时)。
这是唯一一次可以在这种情况下锁定数据吗?
当我在 SQL Server Management Studio 中右键单击表并选择“编辑前 200 行”时,我正在查看的数据会在什么时候被锁定?
我的一位同事表示,以这种方式查看数据时,可以锁定数据行(我想当他说如果您将光标放在一行上并开始编辑数据时)。
这是唯一一次可以在这种情况下锁定数据吗?
这不是真的。在一个窗口中运行此脚本(并使其保持运行):
create table Tx (
ID int not null,
Val1 varchar(20) not null
)
go
insert into Tx (ID,Val1)
select 1,'abc'
go
set nocount on
while 1=1
begin
update Tx set Val1 = CASE WHEN Val1='abc' then 'def' else 'abc' end
RAISERROR('Updated',10,1) WITH NOWAIT
WAITFOR DELAY '00:00:05'
end
每 5 秒,它会翻转Val1
列的值,并在消息选项卡中打印Updated
(假设您设置为“网格中的结果”)。
然后,在另一个 SSMS 实例中,打开Tx
表并开始编辑其中的单行。观察脚本继续执行更新。
它可以被锁定。在编辑面板中,尝试插入一行并违反主键约束。您将收到一条错误对话框弹出消息。现在,当您阅读该消息时,该表将被锁定。如果您在没有确认消息的情况下走开,那张桌子将被无限期锁定。我刚刚通过 SSMS 2008R2 和 SSMS 2012 确认了这一点。
默认情况下,数据不会在 SSMS GUI 编辑器中锁定。
如果您进行更改并尝试保存,您将收到错误/警告以覆盖/丢弃等。我现在无法测试以查看确切的消息,抱歉。