我们在一台较低环境的服务器上进行了从 SQL Server 2016 到 SQL Server 2019 的就地升级。该服务器上有两个数据库。我们将两个数据库的兼容性级别设置为 150。我们有一个存储过程,用于将数据库 A 中的表 A 与表 B 连接到数据库 B。
INSERT INTO TableA (ColumnA, ColumnB, ColumnC)
SELECT A.ColumnA, A.ColumnB, B.ColumnB
FROM TableA A
INNER JOIN TableB B ON A.ColumnD = B.ColumnD
WHERE A.ColumnE = 2
当在 SQL Server 2016 中运行时,它会将唯一的数据列表插入到 TableA 中。自从升级到 SQL Server 2019 以来,它在一次运行中复制了一些行多达 60 次。如果我将兼容性级别降低到 130,它将恢复为唯一列表。
这只在索引被禁用时才会发生。如果我启用索引,则不会发生这种情况,或者如果我使
SELECT
在 MAXDOP 1 下执行。
有什么想法吗?为什么它的工作原理会如此不同?如果我要取出要插入的数据并查看它,如下所示,该查询仅返回一条记录。
SELECT A.ColumnA, A.ColumnB, B.ColumnB
FROM TableA A
INNER JOIN TableB B ON A.ColumnD = B.ColumnD
WHERE A.ColumnE = 2
AND A.ColumnA = 2342342
AND B.ColumnB = 9228382
这是一个错误吗?我已经尝试了所有的 CU,看看它是否已被修复,或者是否是其中之一引入的。没有任何效果。
回答我被问到的几个问题。
更新:
我有一个与 Microsoft 合作的案例。
这方面有什么更新吗? 谢谢。