Динамический SELECT TOP @var In SQL Server - PullRequest
281 голосов
/ 07 октября 2008

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

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

Ответы [ 6 ]

509 голосов
/ 07 октября 2008
SELECT TOP (@count) * FROM SomeTable

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

38 голосов
/ 07 октября 2008

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

set rowcount @top

select * from sometable

set rowcount 0 

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

Oisin.

(отредактировано для замены @@ rowcount на rowcount - спасибо augustlights)

11 голосов
/ 07 октября 2008

В примере x0n это должно быть:

SET ROWCOUNT @top

SELECT * from sometable

SET ROWCOUNT 0

http://msdn.microsoft.com/en-us/library/ms188774.aspx

3 голосов
/ 14 марта 2017
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
3 голосов
/ 07 января 2016

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

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;
3 голосов
/ 07 октября 2008

Также возможно использовать динамический 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...