我们遇到了一个奇怪的问题,我们无法重现,因为它只是偶尔发生。
问题是,有时查询应该包含数据,但却返回空值。如果再次运行,它通常会返回您期望的数据。这种情况似乎大多发生在服务器负载过高时。
我们正在 .NET 中使用 ORM 并连接到 Microsoft SQL Server。无论我们使用哪个版本的 SQL Server,我们都在使用过每个版本(2012 至 2017)。作为 ORM,我们到目前为止一直在使用 Nhibernate,但是当我们将整个项目移植到 .NET Core 时,我们切换到了 Entity Framework Core,在测试某些东西时,我使用 EF Core 3 遇到了一次这个问题。
很多人检查了我们的代码,但什么也没发现。我也无法通过运行 prime95 或类似程序在机器上产生 100% 负载来复制该问题。
对于我们的一个安装,我们切换到了 PostgreSQL,问题从未出现过。我的一位同事认为他记得在 SQL Management Studio 中出现过一次这个问题,但那次再也没有发生过。
有谁见过这个或类似的东西和/或知道如何解决它?
答案1
如果查询使用诸如 GETDATE() 之类的函数,请尝试用变量替换这些函数,并在运行查询之前设置这些变量。
在 where 子句中使用像 GETDATE() 这样的函数或其他 SQL 函数意味着即使数据没有变化,每次执行查询时查询的输出也可能会发生变化。