Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql内部查询问题_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql内部查询问题

Sql内部查询问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表tbl_测试: 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 select top 100 *

我有一个表tbl_测试:

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

select top 100 * from tbl_test 

内部语句没有明确的顺序,因此没有保证行的读取顺序。如果您按
tabid ASC
排序,您应该会看到预期的100条记录。

您的子查询中没有包含order by子句(与TOP一起允许),因此不知道会返回哪些记录。1000显然包含在从子查询返回的数据中,这意味着它将由MAX返回