这个问题不是sql 2005的新问题,sql 2000也一直有的。 因为sql server通过锁机制来保证数据的一致性。所以在默认隔离级别的情况下,sql server上的操作都会对资源加锁,如果出现锁冲突,一方无法拿到该资源的事务就会发生等待,然后当等待时间超过asp.net的query timeout (一般默认30s)就会报timeout错误。如果你的查询对数据的结果不是用于银行一类的对查询结果很高的应用,解决方法如下
1.在A字段加索引
2.使用nolock hint, 例如
select * 
from b with (nolock)
where a = '1'