带有order by子句的sql server TOP命令

时间:2013-11-07 06:20:46

标签: sql-server sql-server-2008

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中的一种错误吗?

1 个答案:

答案 0 :(得分:1)

除非您指定ORDER BY子句,否则SQL不保证订单,因此在第二个示例中,您可以获得第一个插入的行。

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

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