2012-05-22 4 views
1

Я хочу иметь переменную для выбора верхних строк. Я могу выбрать верхние строки на основе переменной. Однако я хочу выбрать все строки, если переменная не указана.top count для SQL-запроса

В настоящее время я использую этот запрос:

DECLARE @TOPCOUNT int; 
SET @TOPCOUNT=10; 

SELECT TOP(@TOPCOUNT) * FROM TABLE1 

Update:

  1. Исходный запрос очень длительный и сложный, так что я не переписать весь запрос без top count in else.

  2. Я не хочу использовать динамический запрос из-за его последствий.

ответ

2

Что-то вроде этого:

DECLARE @TOPCOUNT int; 
--SET @TOPCOUNT=10; 

IF @TOPCOUNT IS NULL 
    SELECT * FROM TABLE1 
ELSE 
    SELECT TOP(@TOPCOUNT) * FROM TABLE1 

Добавлено через выше UPDATE - если это параметр хранимой процедуры, то просто обеспечить по умолчанию для @TOPCOUNT:

@TOPCOUNT INT = 2147483647 --max size of INT 
+0

Спасибо за решение Barry! –

0

Нечто подобное поможет. Просто запустите свой @TOPCOUNT с -1, если вы хотите все строки.

IF @TOPCOUNT = -1 BEGIN 
    SELECT * FROM TABLE1 
END 
ELSE BEGIN 
    SELECT TOP(@TOPCOUNT) * FROM TABLE1 
END 
0
IF @TOPCOUNT IS NULL SET @TOPCOUNT=2147483647 
+0

К выберите ВСЕ строки, как запрошено ОП, а не строки, это не должно быть 'IF @TOPCOUNT IS NULL SET @ TOPCOUNT = 2147483647 \\ максимальный размер INT'? –

+0

К сожалению, я не могу протестировать его в настоящее время, но я думал, что верх 0 - это то же самое, что и не указывать верх. – MichelZ

+1

Нет, 'TOP (0)' вернется - сюрприз - 0 строк! –

Смежные вопросы