SQL Server - 相同的查询,相同的数据库,不同的结果

时间:2014-03-06 17:03:17

标签: sql-server locking isolation-level

我在SQL Server 2008中有一个包含2个表的数据库。我在Management Studio上运行以下查询:

select M.FD_BROWSER_SHORT_NAME AS X, Count(1) AS Y
from TB_EVENTS E 
     INNER JOIN TB_MACHINES M ON E.FD_ID = M.FD_ID AND E.FD_ID_NET = M.FD_ID_NET
where E.FD_EVENT_CODE = 30        
group by M.FD_BROWSER_SHORT_NAME
having Count(1) > 10

当我运行此查询时,结果为:

X    Y
OP   23
CR   1809
IE   5392
MZ   1000

然后我在同一个数据库(同一个会话)上再次运行查询(F5)。结果变为:

X    Y
OP   1023
CR   1809
IE   5392

当我再次运行查询时,结果恢复正常:

X    Y
OP   23
CR   1809
IE   5392
MZ   1000

在同一台服务器上,同时我有一个C#应用程序更改数据库(INSERT和UPDATE)。当我停止此应用程序时,问题就会停止。

首先,我认为问题与锁相关。然后我尝试在SQL语句之前添加它:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

但问题仍然存在。

我试图在另一台服务器上重现该问题,但不会发生。我试图将数据库迁移到另一个服务器和另一个版本的SQL Server,但仍然会发生。

另一个包含聚合函数的查询会出现问题。

我还尝试更新统计信息并重建所有索引。没什么...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在您设置交易之前,可能您的C#应用​​已锁定。 尝试未提交读取并查看显示内容:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED