今天我们发现了 SQL Server 2012 SP1 的一些奇怪行为。我们知道如何重现问题,但我们不确定是什么原因造成的。这是一个非常笼统的例子:
假设您有一个数据库 test,它有一个表 table1,其中包含以下数据:
column1
-
1
2
3
4
您运行以下查询:
USE [test]
SELECT [column1]
FROM [test].[dbo].[table1]
WHERE [column1] IN
(SELECT TOP 5 [column1]
FROM [table1])
正如预期的那样,返回 5 行。现在运行以下查询:
USE [test]
SELECT [column1]
FROM [test].[dbo].[table1]
WHERE [column1] IN
(SELECT TOP 5 [test].[dbo].[table1].[column1]
FROM [table1])
这次返回 10 行,即使SELECT TOP 5 [test].[dbo].[table1].[column1] FROM [table1]
返回 5 行。
查看执行计划,我可以看出服务器正在做不同的事情,但我不知道为什么。
解决方案似乎是确保我们不会无缘无故地过于明确,但既然我们已经遇到了,我们要确保没有人再次导致这种行为。