我在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,但仍然会发生。
另一个包含聚合函数的查询会出现问题。
我还尝试更新统计信息并重建所有索引。没什么...
有什么想法吗?
答案 0 :(得分:0)
在您设置交易之前,可能您的C#应用已锁定。 尝试未提交读取并查看显示内容:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED