-2
CREATE DATABASE TEST

USE TEST

CREATE TABLE TBL_TEMP
(
   ID           INT,
   NAME     VARCHAR(100),
   CREATED_ON   DATETIME
)

INSERT INTO TBL_TEMP VALUES (1, 'A', NULL)
INSERT INTO TBL_TEMP VALUES (2, 'B', NULL)
INSERT INTO TBL_TEMP VALUES (3, 'C', NULL)
INSERT INTO TBL_TEMP VALUES (4, 'D', NULL)

SELECT TOP 1 * 
FROM TBL_TEMP 
ORDER BY CREATED_ON

结果:

ID   NAME   CREATED_ON
------------------
 2   B      NULL

SELECT TOP 1 * FROM TBL_TEMP 

结果:

ID NAME   CREATED_ON
--------------------
1  A      NULL

为什么top 1会给出两个不同的结果,是不是在使用 order by 子句时它会选择随机行,而在不使用时它会给出正确的最高记录?

它是 sql server 2008 中的一种错误吗?

4

1 回答 1

1

除非您指定子句,否则 SQL 不保证顺序ORDER BY,因此在第二个示例中,幸运的是您获得了第一个插入的行。

如果您指定一个ORDER BY子句,则如果要排序的值相同,则不定义顺序。SQL 可以选择这四个中的任何一个。

这不是错误,而是 SQL 中定义的行为。

于 2013-11-07T06:27:32.200 回答