SQL查询即使失败也能正常工作

时间:2013-10-01 15:44:12

标签: sql-server-2012

我正在创建两个表 一个有温度传感器列表(包括最后一个测量值) 另一个具有每个测量的历史值

表的定义如下:

CREATE TABLE [dbo].[History](
    [SensorID] [int] NOT NULL,
    [TimeStamp] [datetime] NOT NULL,
    [Temperature] [float] NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Sensors](
    [SensorID] [int] NOT NULL,
    [Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]

传感器表还应该有Temperature列来存储最后一个值,但我忘记添加它,这就是我发现这种奇怪行为的方式

我想获得最后一个值最低的5个传感器的历史数据。

SELECT *
FROM History
WHERE SensorID IN (SELECT TOP 5 SensorID FROM Sensors ORDER BY Temperature)

这里的问题是查询有效并返回结果(probalby不正确),但是:

  • 内部选择不起作用,因为Sensors表不包含Temperature列。如果我单独运行它会按预期失败。 ORDEr BY的文档指出,该列必须在SELECT或FROM表中定义。 - http://technet.microsoft.com/en-us/library/ms188385.aspx
  • 当我检查执行计划时,没有订单。只有顶部和过滤器,都应用于传感器表和左半连接。

我知道我可以通过使用别名轻松修复它。这将使我的查询失败,因为我想要。这里的问题是,这是SQL Server / Query优化器中的某种错误吗?

在SQL Server 11.0.3128上测试 注意:SQL Management Studio intellisense在编写ORDER BY clausule

时也提供Temperature列

0 个答案:

没有答案