Sql内部查询问题

时间:2011-11-09 12:21:39

标签: sql sql-server sql-server-2008

我有一张桌子tbl_test:

create table tbl_test (
    tabid int identity
)

的值为:

 Insert into tbl_test values 1 union 2 union 3 .... union 1000

查询:

select MAX(b.tabid) from
(  
    select top 100 * from tbl_test
) as b  

我希望此查询返回100,但它返回1000。

2 个答案:

答案 0 :(得分:8)

select top 100 * from tbl_test 

内部语句没有明确的顺序,因此没有保证读取行的顺序。如果您按tabid ASC订购,则会看到预期的100。

答案 1 :(得分:2)

你的子查询中没有包含order by子句(允许与TOP一起使用),因此无法确定将返回哪些记录。 1000显然包含在从子查询返回的数据中,这意味着它将由MAX返回。