Пользовательские функции SQL: извлечение TOP n записей в пользовательской функции - PullRequest
2 голосов
/ 12 ноября 2008

Почему следующее не работает?

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

Я просто хочу иметь возможность указать количество возвращаемых результатов. [SQL Server 2000.]

Спасибо!

Ответы [ 5 ]

5 голосов
/ 12 ноября 2008

Для MS SQL 2000 вы можете использовать:

CREATE FUNCTION Test (@top integer)

RETURNS TABLE

AS

SET ROWCOUNT @top

RETURN SELECT * FROM SomeTable
2 голосов
/ 12 ноября 2008

Поддержка этого была добавлена ​​в SQL Server 2005, но она недоступна в 2000 году. Вместо этого вам придется использовать (дрожать) динамический sql или какой-либо другой числовой прием.

1 голос
/ 12 ноября 2008

Тест CREATE FUNCTION (@top integer)

СТОЛ ВОЗВРАЩЕНИЯ

AS

ВОЗВРАТ

ВЫБРАТЬ ТОП (@top) * ИЗ SomeTable

GO

Однако без предложения ORDER BY это не имеет особого смысла (порядок результатов не гарантируется).

0 голосов
/ 12 ноября 2008

Джейк, попробуйте установить в rowcount свой параметр функции, а затем сделайте выбор. Я не пробовал это, YMMV.

От: http://msdn.microsoft.com/en-us/library/aa259189(SQL.80).aspx

Синтаксис

SET ROWCOUNT { number | @number_var }
Arguments

number | @number_var

Число (целое число) строк, которые должны быть обработаны перед остановкой данного запроса.

0 голосов
/ 12 ноября 2008

К сожалению, переменная TOP недоступна в SQL Server 2000. Динамический SQL не поддерживается ни в одной версии.

...