-1

以下查询通常会返回大量结果(大约 750k 个结果)。但是,在生产中,我遇到了返回 0 结果的零星情况。如果我们在它返回 0 后的下一秒重新运行它,它只会正常返回结果。

我确信数据仍然存在,并且不应该有任何东西会删除它......

我在几个地方看了看,我找不到可能导致上述问题的原因......而且,似乎没有一种简单的方法来复制它......这只是随机的。

由于我的 SQL 知识非常有限,您能否考虑一下可能发生这种情况的某些场景?或者也许建议简单的调试方法?

SELECT MAX(Table1.Cust_ID) AS cust_id, Table1.Email, MAX(Table1.Cust_Name) as cust_name
FROM dbo.Table1 WITH (NOLOCK)
INNER JOIN dbo.Table2 WITH (NOLOCK)
  ON Table1.id = Table2.id
  WHERE Table1.some_id = 100 AND Table1.some_value = 'test_value'
  AND  Table1.some_boolean_1 = 1
  AND  Table1.some_date_1 IS NULL
  AND (Table1.some_boolean_2 IS NULL OR Table1.some_boolean_2 = 1)
  AND (Table1.some_date_2 > '20171119' OR Table1.some_date_3 > '20171119' OR 
       Table2.some_date_3 > '20171119')
GROUP BY Table1.Email

非常感谢!

4

1 回答 1

-2

WITH(NOLOCK) 提示使 SQL Server 以非事务性方式执行查询,这意味着数据完整性被忽略,结果可以是任何类型的中间状态。与将事务隔离级别设置为 READ UNCOMMITTED 的效果相同,但仅适用于此查询。结果还可以包括已插入但尚未提交的行,以及除事务之外运行的任何内容。不确定是什么导致了空结果,但是当修改同时运行时,它可能会返回奇怪的结果。

于 2018-11-19T16:11:14.997 回答