SQL Server语法问题

时间:2014-07-28 12:56:39

标签: sql sql-server

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

SELECT TOP 1 *
  FROM  (SELECT TOP 8 *
        FROM [BP_BasicPolicy ] 
        )

由于某种原因,它无法编译,我收到错误:

  

Msg 102,Level 15,State 1,Line 4
  ')'附近的语法不正确。

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

2 个答案:

答案 0 :(得分:6)

您需要子查询的别名:

SELECT TOP 1 t.*
FROM (SELECT TOP 8 *
      FROM [BP_BasicPolicy ] 
     ) t

编辑:

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

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

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

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

SELECT TOP 1 t.*
FROM [BP_BasicPolicy ] ;

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

答案 1 :(得分:0)

您的查询可以简化如下,但如果您的意图不是这样,请指明目标,欢呼:)

SELECT TOP 1 *  FROM [BP_BasicPolicy ]