Этот вопрос уже имеет ответ здесь:
Используя vs2008 конструктор запросов, я пытаюсь сделать запрос, который получает параметр для"TOP
"Команда, и затем я сталкиваюсь с ошибкой "Ошибка в главном выражении"
Работы:
SELECT TOP 5 * FROM dbo.SomeTable
WHERE SomeColumn = SomeValue
Не работает:
SELECT TOP @param1 * FROM dbo.SomeTable
WHERE SomeColumn = SomeValue
сопроводительный текст http://www.freeimagehosting.net/uploads/f9b9354577.jpg
Нужны скобки, и только для SQL Server 2005 и более поздних версий
SELECT TOP (@param1) ...
Для более старых версий SQL Server вы можете использовать:
SET ROWCOUNT @NumberOfResults
SELECT * FROM MyTable
SET ROWCOUNT 0
Однако вам не следует использовать этот метод в 2008 году :
Использование SET ROWCOUNT не повлияет Операторы DELETE, INSERT и UPDATE в следующем выпуске SQL Server (2008). Не используйте SET ROWCOUNT с Операторы DELETE, INSERT и UPDATE в новых разработках и планируем изменять приложения, которые в настоящее время используют Это. Также для DELETE, INSERT и Операторы UPDATE, которые в настоящее время используют УСТАНОВИТЬ ROWCOUNT, мы рекомендуем вам перепишите их, чтобы использовать синтаксис TOP. Для получения дополнительной информации см. УДАЛИТЬ. (Transact-SQL), INSERT (Transact-SQL), или ОБНОВЛЕНИЕ (Transact-SQL).