症状
请考虑以下情况:
-
在 Microsoft SQL Server 2014 或 SQL Server 2012 中运行过程。
-
该过程包含下列条件:
-
它联接了非常频繁更新的表。
-
它具有包含参数的 WHERE 子句。
-
它使用选项(重新编译)。
-
-
此过程在具有不同参数值集的多个并发连接上运行。
-
服务器的负载较重,导致上述每个过程的时间比平时更长。
在这种情况下,如果在查询编译结束和在连接开始执行查询之间的时间间隔内满足以下附加条件,则你可能会收到在连接上运行的过程中出现的错误结果:
-
条件 1:另一个并发连接对已联接的表进行更新,该表的大小足以触发连接上的查询的另一个重新编译。
-
条件 2:同一查询已从另一个连接重新编译,然后放入缓存中。
重要说明 这种计时问题非常少见。
原因
出现此问题的原因是,在连接上运行查询后,查询的参数值更改为错误值。 出现这种情况的原因是,并发编译之间存在极其罕见的计时问题。
解决方案
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2014 的累积更新4 /en-us/help/2999197
SQL Server 2012 SP2 的累积更新2 /en-us/help/2983175
SQL Server 2012 SP1 的累积更新11 /en-us/help/2975396
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。