【问题标题】:SQL User-Defined Functions: Fetching TOP n records in a user-defined functionSQL 用户定义函数:获取用户定义函数中的 TOP n 记录
【发布时间】:2008-11-12 16:20:42
【问题描述】:

为什么下面的不起作用?

CREATE FUNCTION Test (@top integer)
RETURNS TABLE
AS
RETURN
SELECT TOP @top * FROM SomeTable
GO

我只是希望能够指定要返回的结果的数量。 [SQL Server 2000。]

谢谢!

【问题讨论】:

    标签: sql sql-server sql-server-2000 user-defined-functions


    【解决方案1】:

    对于 MS SQL 2000,您可以使用:

    CREATE FUNCTION Test (@top integer)
    
    RETURNS TABLE
    
    AS
    
    SET ROWCOUNT @top
    
    RETURN SELECT * FROM SomeTable
    

    【讨论】:

      【解决方案2】:

      SQL Server 2005 中添加了对此的支持,但在 2000 年不可用。您必须使用(颤抖)动态 sql 或其他一些数字技巧。

      【讨论】:

        【解决方案3】:

        CREATE FUNCTION 测试(@top 整数)

        返回表

        作为

        返回

        SELECT TOP (@top) * FROM SomeTable

        但是,如果没有 ORDER BY 子句,它就不是很有意义(不能保证结果的顺序)。

        【讨论】:

          【解决方案4】:

          糟糕,变量 TOP 在 SQL Server 2000 中不可用。任何版本也不支持动态 SQL。

          【讨论】:

            【解决方案5】:

            杰克,尝试将行数设置为您的函数参数,然后进行选择。这个我没试过,YMMV。

            发件人:http://msdn.microsoft.com/en-us/library/aa259189(SQL.80).aspx

            语法

            SET ROWCOUNT { number | @number_var }
            Arguments
            
            number | @number_var
            

            是在停止给定查询之前要处理的行数(整数)。

            【讨论】:

            • 您不能在用户定义的函数中使用 set rowcount
            猜你喜欢
            • 1970-01-01
            • 2012-07-25
            • 1970-01-01
            • 2018-06-30
            • 1970-01-01
            • 2017-06-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-25
            相关资源
            最近更新 更多