【问题标题】:How to do SELECT TOP @Param in a Stored Procedure?如何在存储过程中执行 SELECT TOP @Param?
【发布时间】:2009-04-22 20:45:31
【问题描述】:

我正在尝试在 proc 中执行以下操作,但遇到不正确的语法错误:

SELECT TOP @NumberOfResultsToReturn *

我在这里做错了什么?谢谢。

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    加括号:

    SELECT TOP (@NumberOfResultsToReturn) *
    

    【讨论】:

    • 酷我自己学到了一些新东西,我以为它需要动态 sql
    【解决方案2】:

    SQL Server:将参数放在括号中:

    SELECT TOP (@NumberOfResultsToReturn) *
    

    【讨论】:

      【解决方案3】:

      这是我过去的做法:

      SET @@ROWCOUNT = @NumberOfResultsToReturn
      SELECT ........
      SET @@ROWCOUNT = 0
      

      这会起作用,尽管如果您使用支持此语法的 SQL 服务器,SELECT TOP (@NumberOfResultsToReturn) 更可取:

      【讨论】:

        【解决方案4】:

        这在 SQL Server 2005 及更高版本中受支持,但在 SQL Server 2000 中不支持。您使用的是什么版本?

        【讨论】:

          【解决方案5】:

          您可能不得不改用 RowNumber() 方法。

          这是一个例子:

          DECLARE @PageNum AS INT;
          DECLARE @PageSize AS INT;
          SET @PageNum = 2;
          SET @PageSize = 10;
          
          WITH OrdersRN AS
          (
              SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
                    ,OrderID
                    ,OrderDate
                    ,CustomerID
                    ,EmployeeID
                FROM dbo.Orders
          )
          
          SELECT * 
            FROM OrdersRN
           WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 
                            AND @PageNum * @PageSize
           ORDER BY OrderDate
                   ,OrderID;
          

          编辑或者你可以使用括号...我当时不知道 :) 谢谢大家。

          【讨论】:

            【解决方案6】:

            恐怕你不能在 SQL 2000 中做到这一点,但你可以尝试构造查询

            DECLARE @query VARCHAR(500)
            set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
            EXEC @query
            

            我不知道 SQL 2005 的括号技巧,也谢谢大家,!!!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-12-13
              • 1970-01-01
              • 2010-09-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多