2009-12-20 3 views
22

Использования построителя запросов VS2008, я пытаюсь сделать запрос, который получает параметр для «TOP» Command, а затем я сталкиваюсь ошибка «Ошибка в верхнем выражении»SQL: Как использовать параметр TOP, например, в SELECT TOP @amount?

Работа:

SELECT TOP 5 * FROM dbo.SomeTable 
WHERE SomeColumn = SomeValue 

не работает:

SELECT TOP @param1 * FROM dbo.SomeTable 
WHERE SomeColumn = SomeValue 

alt text http://www.freeimagehosting.net/uploads/f9b9354577.jpg

ответ

64

нужны круглые скобки, и только для SQL Server 2005 и выше

SELECT TOP (@param1) ... 
6

Для более старых версий SQL Server, вы можете использовать:

SET ROWCOUNT @NumberOfResults 
SELECT * FROM MyTable 
SET ROWCOUNT 0 

However, you should not use this technique on 2008:

Использование SET ROWCOUNT не будет влиять на DELETE, INSERT и UPDATE операторы в следующей версии SQL Server (2008). Не используйте SET ROWCOUNT с операциями DELETE, INSERT и UPDATE в новых разработках и планируйте изменять приложения, которые в настоящее время используют . Кроме того, для DELETE, INSERT и операторов UPDATE, которые в настоящее время используют SET ROWCOUNT, мы рекомендуем вам переписать их для использования синтаксиса TOP. Для получения дополнительной информации см. DELETE (Transact-SQL), INSERT (Transact-SQL), или UPDATE (Transact-SQL).