SQL事务超时

时间:2012-11-15 16:26:06

标签: c# sql winforms transactions

当我在管理工作室中执行以下SQL时,查询返回预期结果:

SELECT MAX(ID) FROM table WHERE field = value;

然而,当我的客户端应用程序(WinForms)在事务中间执行此SQL时,查询超时而不返回值。我怀疑这是因为事务包括其他SQL语句,它们正在添加/修改相同的“表”。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

“SELECT MAX(ID)”是一个聚合函数,会在表上执行大量锁定 - 可能会对表中的所有记录执行共享读锁定,当然对所有符合条件的记录,和其他取决于是否使用行或页锁。如果MAX想要锁定的这些记录的任何出现未完成的写锁定,则MAX将超时。您需要同时了解其他锁定的位置。如果您使用的是SQL Server,则可以使用SQL事件探查器获取跟踪信息,该跟踪信息将显示该表上的所有锁定,包括来自其他事务的锁定。

答案 1 :(得分:0)

最后,我只是在事务开始之前使用MAX函数移动了SQL语句,并将该值存储为变量,以便以后在转换中使用。