SQL Server语法问题

Ben*_*Ben 0 sql sql-server

我在这里有一些非常基本的SQL:

SELECT TOP 1 *
  FROM  (SELECT TOP 8 *
        FROM [BP_BasicPolicy ] 
        )
Run Code Online (Sandbox Code Playgroud)

由于某种原因它不编译,我得到错误:

消息102,级别15,状态1,行4
'''附近的语法不正确.

什么是正确的语法?我不明白为什么我收到此错误,因为我认为它是完全合法的SQL Server语法

Gor*_*off 6

您需要子查询的别名:

SELECT TOP 1 t.*
FROM (SELECT TOP 8 *
      FROM [BP_BasicPolicy ] 
     ) t
Run Code Online (Sandbox Code Playgroud)

编辑:

我犹豫补充说,使用top没有order by没有意义.你需要一些订购.所以,你可以这样做:

SELECT TOP 1 t.*
FROM (SELECT TOP 8 *
      FROM [BP_BasicPolicy ] 
      ORDER BY col1 ASC
     ) t
ORDER BY col2 DESC;
Run Code Online (Sandbox Code Playgroud)

实际上,你不需要order by在最外层,但它仍然是一个好主意.

如果没有order by,您可以这样做:

SELECT TOP 1 t.*
FROM [BP_BasicPolicy ] ;
Run Code Online (Sandbox Code Playgroud)

这将选择任意行.对于特定的一个,请使用order by.

  • 它仍会抱怨子查询中没有`ORDER BY`的`TOP`. (3认同)