[英]How to retrieve few random rows of left table and all the related rows from right table in 1 to n relationship
[英]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.