Как я могу настроить динамическую переменную, определяющую количество возвращаемых строк в SQL Server? Ниже недопустимый синтаксис в SQL Server 2005+:
DECLARE @count int
SET @count = 20
SELECT TOP @count * FROM SomeTable
Запуск SQL Server 2005 в настоящее время


SELECT TOP (@count) * FROM SomeTable
Это будет работать только с SQL 2005+
Я тоже всегда забываю круглые скобки.
отлично! все это время я думал, что мне нужно использовать динамический sql.
Кто еще здесь, чтобы понять глупую ошибку в своем запросе, не добавив круглых скобок?
Ты спас мне день! Думал только для этого переместить все в динамический запрос!
Я забыл *: D
Синтаксис «select top (@var) ...» работает только в SQL SERVER 2005+. Для SQL 2000 вы можете:
set rowcount @top
select * from sometable
set rowcount 0
Надеюсь это поможет
Ойсин.
(отредактировано, чтобы заменить @@ rowcount на rowcount - спасибо augustlights)
Я слышал, что с помощью @@ RowCount можно получить неправильный номер строки, если у вас есть первичный ключ с несколькими столбцами. Это правда?
В примере x0n это должно быть:
SET ROWCOUNT @top
SELECT * from sometable
SET ROWCOUNT 0
Также можно использовать динамический 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)
Но будьте (очень) осторожны с Атаки с использованием SQL-инъекций при таком подходе.
Или вы просто заключите переменную в скобки
DECLARE @top INT = 10;
SELECT TOP (@Top) *
FROM <table_name>;
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
Вы используете SQL 2005 или 2008?