Используйте переменную с TOP в избранном операторе в SQL Server, не делая это динамичным [дубликат]

Этот вопрос уже имеет ответ здесь:

declare @top  int
set @top = 5
select top @top * from tablename

Действительно ли это возможно?

Или какая-либо идея для такой логики (я не хочу использовать динамический запрос)?

205
задан Konamiman 18 December 2009 в 00:36
поделиться

3 ответа

Да, в SQL Server 2005 можно использовать переменную в предложении top .

select top (@top) * from tablename
381
ответ дан 23 November 2019 в 04:52
поделиться

SQL Server 2005 фактически позволяет нам параметризовать предложение TOP с помощью переменной, выражения или оператора. Таким образом, вы можете делать такие вещи, как:

SELECT TOP (@foo) a FROM table ORDER BY a 

SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a 

SELECT TOP (@foo + 5 * 4 / 2) a FROM table ORDER BY a 

Источник

38
ответ дан 23 November 2019 в 04:52
поделиться

В 2005 году и позже вы можете сделать это, поскольку в этой ветке есть несколько ответов.

Менее известно, что вы можете добиться этого также в 2k, используя SET ROWCOUNT.

  -- Works in all versions
  SELECT TOP 10

  -- Does not work on 2000
  SELECT TOP (10)
  SELECT TOP (@rows)

  -- Works in both 2ooo and 2oo5
  SET ROWCOUNT @max

  SELECT * 
  FROM ...

  SET ROWCOUNT 0

Обратите внимание: если вы забудете SET ROWCOUNT 0 в конце, ограничение останется ... и вам будет очень трудно найти ошибки: -)

25
ответ дан 23 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: