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中的一种错误吗?
答案 0 :(得分:1)
除非您指定ORDER BY
子句,否则SQL不保证订单,因此在第二个示例中,您可以获得第一个插入的行。
如果指定ORDER BY
子句,则如果要排序的值相同,则不会定义顺序。 SQL可以选择四个中的任何一个。
这不是错误,而是SQL中定义的行为。