为什么变量不能与TOP命令一起使用?

时间:2018-08-31 08:11:50

标签: sql-server tsql

  1. 为什么下面的SQL脚本会引发错误?
  2. TOP命令是否存在此问题?
  3. 是因为SELECT语句不支持SQL变量吗?

我的代码:

DECLARE @cnt INTEGER = 0;
Declare @cnt_total INT;

SET @cnt_total = 5

WHILE (@cnt < @cnt_total)
BEGIN
    SET @cnt = @cnt + 1;

    SELECT TOP @cnt * 
    FROM FOCUSCDR.PATIENTDXHISTORY
END;

错误:

  

第15级州立1行9的消息102
  '@cnt'附近的语法不正确。

虽然上面的方法在使用时有效。

SELECT TOP 1 * 
FROM FOCUSCDR.PATIENTDXHISTORY

1 个答案:

答案 0 :(得分:3)

因为语法需要括号:

DECLARE @cnt INTEGER = 0;
Declare @cnt_total int ;

Set @cnt_total = 5

WHILE (@cnt < @cnt_total)
BEGIN
   SET @cnt = @cnt + 1;
   Select  top (@cnt) * from FOCUSCDR.PATIENTDXHISTORY
END;

编辑:

如@Tim Biegeleisen的评论中所述,您应该使用ORDER BY,否则使用TOP毫无意义,因为不能保证顺序,并且您可能会得到不一致的结果。查看this article以获得更多信息。