2011-10-28 16 views
3

我需要允許用戶查詢全部或部分記錄。現在我這樣做:TSQL:TOP的動態值

DECLARE @Limit INT = NULL 

IF @Limit IS NULL SELECT @Limit = COUNT(ID) FROM vwNotifications 

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title 
FROM vwNotifications 

有沒有一種方法,我可以做到這一點,而無需使用COUNT查詢?

回答

5

你有兩個選擇

1使頂部像2十億如果是0 後來again..do你真想回到2 billio n行在1槍?

DECLARE @Limit INT = NULL 

SELECT @Limit = COALESCE(@Limit, 200000000) 

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title 
FROM vwNotifications 

,或者其他

DECLARE @Limit INT = NULL 

IF @Limit IS NULL 

SELECT ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title 
FROM vwNotifications 

else 

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title 
FROM vwNotifications 
做的
3

假設你的表永遠不會包含更多的行比整數支持(即主鍵是一個int,而不是bigint,這在實踐中是可能的):

DECLARE @Limit INT = NULL 

IF @Limit IS NULL OR @Limit = 0 
    SET @Limit = 2147483647 -- Max Int 

SELECT TOP (@Limit) ROW_NUMBER() OVER(ORDER BY Type, CreatedBy DESC) AS Row, Title 
FROM vwNotifications 

你的另一個選擇是一個if語句和兩個查詢..