Динамический SELECT TOP @var В SQL Server

Как мне настроить динамическую переменную для количества строк, возвращаемых в SQL Server? Ниже приведен недопустимый синтаксис в SQL Server 2005 +:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

Ответ 1

SELECT TOP (@count) * FROM SomeTable

Это будет работать только с SQL 2005 +

Ответ 2

Синтаксис "select top (@var)..." работает только в SQL SERVER 2005+. Для SQL 2000 вы можете:

set rowcount @top

select * from sometable

set rowcount 0 

Надеюсь, что это поможет

Oisin.

(отредактировано для замены @@rowcount с помощью rowcount - спасибо августов)

Ответ 4

Также возможно использовать динамический SQL и выполнить его с помощью команды exec:

declare @sql  nvarchar(200), @count int
set @count = 10
set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table'
exec (@sql)

Ответ 5

Или вы просто поместите переменную в круглые скобки

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;

Ответ 6

declare @rows int = 10

select top (@rows) *
from Employees
order by 1 desc -- optional to get the last records using the first column of the table

Ответ 7

Пожалуйста, помогите мне, мне нужно извлечь только 95-й предмет (от самого маленького к самому большому) за продукт

например:

  • В продукте № 1 у меня есть 11 доступных записей, чтобы получить его 95-й элемент, я делаю этот расчет

= ROUND (11 * (95/100), 0)

  • 95-й пункт продукта №1 должен быть 10-м предметом в записи, и должна отображаться только 10-я запись
  • Проблема здесь в том, что некоторые продукты содержат различное количество записей в базе данных

Каков наилучший способ сделать это в транзакции SQL

заранее спасибо