2012-05-22 92 views
1

我想要一個用於選擇頂行的變量。我可以根據變量選擇頂部行。但是,如果變量未提供,我想選擇所有行。SQL查詢的最高計數

目前我使用此查詢:

DECLARE @TOPCOUNT int; 
SET @TOPCOUNT=10; 

SELECT TOP(@TOPCOUNT) * FROM TABLE1 

更新:

  1. 原始查詢是非常漫長和複雜的,所以我不重寫整個查詢,而不在其他條款中最高。

  2. 我不想使用動態查詢,因爲它的影響。

回答

2

事情是這樣的:

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

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

添加上述更新後 - 如果這是一個存儲過程的參數,然後只是提供一個默認爲@TOPCOUNT

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

感謝Barry的解決方案! –

0

這樣的事情會有所幫助。如果你想要所有的行,只需使用-1來初始化你的@TOPCOUNT。

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

要選擇所有的行作爲OP問,而不是行不應該這樣'IF @TOPCOUNT IS NULL SET @ TOPCOUNT = 2147483647 \'INT'的最大尺寸? –

+0

不幸的是,我目前無法測試它,但我認爲top 0與沒有指定top相同。 – MichelZ

+1

不,'TOP(0)'會返回 - 意外 - 0行! –