在SQL Server中等待问题

时间:2011-06-28 23:50:12

标签: sql sql-server

while 1 = 1     
  begin         
   waitfor time @timeToRun         
   begin             
     /*delete some records from table X*/        
   end     
  end 

在上面的代码中,SQL服务器会在等待期间锁定表X吗?我会 喜欢在这个等待时间内将记录插入表X.有可能吗?

2 个答案:

答案 0 :(得分:1)

所有写入操作都会对正在更新(删除)的行获取X锁定,并且所有这些X锁定都将保留,直到事务提交为止。如果没有明确指定事务,则每个语句都会创建一个隐式事务,该事务在语句结束时自动提交。

因此,您的问题的答案取决于您是否在现有交易的上下文中调用此问题。如果没有,那么(假设您没有在内部开始...结束块中启动事务并保持事务处于打开状态),则不会保持锁定。如果代码在现有事务的上下文中运行(例如,由WCF服务行为自动启动的客户端中的TransactionScope),那么在您等待时,删除所放置的任何锁定都将保留,直到事务处理为止承诺..

答案 1 :(得分:0)

两部分问题:
1)在上面的代码中,SQL服务器会在等待期间锁定表X吗? 否。它可能会锁定行,但不会锁定表。

2)我想在此等待时间内将记录插入表X.有可能吗?
是的,但在您的提交

之前,它们将被锁定

注意:您希望在BEGIN / COMMIT块的事务中包装您正在进行的任何工作。这将完全避免锁定问题。