while 1 = 1
begin
waitfor time @timeToRun
begin
/*delete some records from table X*/
end
end
在上面的代码中,SQL服务器会在等待期间锁定表X吗?我会 喜欢在这个等待时间内将记录插入表X.有可能吗?
答案 0 :(得分:1)
所有写入操作都会对正在更新(删除)的行获取X锁定,并且所有这些X锁定都将保留,直到事务提交为止。如果没有明确指定事务,则每个语句都会创建一个隐式事务,该事务在语句结束时自动提交。
因此,您的问题的答案取决于您是否在现有交易的上下文中调用此问题。如果没有,那么(假设您没有在内部开始...结束块中启动事务并保持事务处于打开状态),则不会保持锁定。如果代码在现有事务的上下文中运行(例如,由WCF服务行为自动启动的客户端中的TransactionScope
),那么在您等待时,删除所放置的任何锁定都将保留,直到事务处理为止承诺..
答案 1 :(得分:0)
两部分问题:
1)在上面的代码中,SQL服务器会在等待期间锁定表X吗?
否。它可能会锁定行,但不会锁定表。
2)我想在此等待时间内将记录插入表X.有可能吗?
是的,但在您的提交
注意:您希望在BEGIN / COMMIT块的事务中包装您正在进行的任何工作。这将完全避免锁定问题。