簡體   English   中英

如何從SQL Server中的表中檢索前N行或所有行

[英]How to Retrieve either Top N rows OR all rows from a table in SQL Server

我有一個datagridview其中一個允許用戶retriev要么n通過點擊記錄(使用文本框)或所有記錄buttun

現在想用單個查詢檢索Top N記錄或所有記錄。 目前,我正在使用2種不同的查詢來實現。

//retrieving Top N Records
 SELECT Top @Rows FROM CaseDetails //@Row is parameter 

 //retrieving All records
SELECT Top (SELECT COUNT(*) FROM CaseDetails) FROM CaseDetails

如何在SQL Server使用單個查詢來執行這兩個選項?

這是一個棘手的問題。

確實,您可能在所有情況下都傳遞了@Rows ,或者傳遞NULL來選擇所有行,然后通過ISNULL合並null來從表中選擇計數以獲取所有行。

// Set the Rows param first
SELECT @Rows = ISNULL(@Rows, (SELECT COUNT(*) FROM CaseDetails))

// @Rows is parameter
SELECT TOP @Rows * FROM CaseDetails

我認為您最好創建一個類似

create procedure sp_fetch 
@row int = NULL
as
begin
if @row = 0 or @row is null
SELECT * FROM CaseDetails
else
select top @row * from CaseDetails
end

然后,您可以像這樣調用程序

exec sp_fetch(10)

選擇之前不需要計數所有行。 假設@Rows是一個int,則可以將int的最大值用作默認值。 因此,如果@Rows為0或為null,則返回所有行,否則,返回@Rows行:

SELECT TOP (ISNULL(NULLIF(@Rows,0), 2147483647)) * FROM CaseDetails;

這很好

聲明參數

Create Procedure uspRetrieve
@Rows int =NULL
AS
BEGIN
   SET NOCOUNT ON;

   SET ROWCOUNT @Rows
   SELECT * FROM CaseDetails
End

如果您提供@ Row = 0,則將獲得所有記錄,否則您將獲得@Row =您的限制

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM