SQL 用户定义函数:获取用户定义函数中的 TOP n 记录

Posted

技术标签:

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

为什么下面的不起作用?

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

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

谢谢!

【问题讨论】:

【参考方案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

以上是关于SQL 用户定义函数:获取用户定义函数中的 TOP n 记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 中的用户定义函数返回多个值

如何在 SQL Server 中获取用户定义的表值函数的结果形状? [复制]

获取所有程序的、用户定义的函数

用户定义函数 T-SQL 中的大小写敏感性

SQL Server用户定义的函数(UDF)使用详解

如何获取用户定义函数的地址?