如何解决如何限制在我的 SQL Server 函数中返回的行数?
CREATE FUNCTION [dbo].[GET_CUSTOMER_DATA]
(
-- Add the parameters for the function here
@customerID bigint,@maxRows int,@offset int,@rows int
)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT *
FROM SS_CustomerCard AS SS_CC
INNER JOIN SS_PersonalRepresentative AS SS_PR
ON SS_PR.customerID = SS_CC.ID
INNER JOIN SS_ApplicationStatus AS SS_AS
ON SS_AS.CustomerID = SS_CC.ID
WHERE
SS_CC.ID='@customerID'
ORDER BY SS_AS.EventDateTime DESC,SS_CC.FirstName DESC,SS_CC.LastName DESC
OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY
)
GO
我想传递一个参数来限制返回的行数(maxRows)
解决方法
您可以在 TOP()
语句中使用 SELECT
子句。
这是一个概念性示例。
SQL
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY,vehicleMake VARCHAR(20));
INSERT INTO @tbl (vehicleMake) VALUES
('Chevrolet'),('Tesla'),('Audi'),('Nissan');
DECLARE @tableVariable TABLE (ID INT,vehicleMake VARCHAR(20));
DECLARE @topRows INT = 2;
INSERT INTO @tableVariable
SELECT *
FROM @tbl
ORDER BY id;
SELECT TOP(@topRows) *
FROM @tableVariable
ORDER BY id;
,
我认为您正在尝试限制 OFFSET/FETCH
之前的总行数。如果是这样,您需要将其放入子查询/派生表中,并添加另一个ORDER BY
:
CREATE FUNCTION [dbo].[GET_CUSTOMER_DATA]
(
-- Add the parameters for the function here
@customerID bigint,@maxRows int,@offset int,@rows int
)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM (
SELECT TOP (@maxRows) all_needed_columns_here_aliased_if_necessary
FROM SS_CustomerCard AS SS_CC
INNER JOIN SS_PersonalRepresentative AS SS_PR
ON SS_PR.customerID = SS_CC.ID
INNER JOIN SS_ApplicationStatus AS SS_AS
ON SS_AS.CustomerID = SS_CC.ID
WHERE
SS_CC.ID=@customerID
ORDER BY SS_AS.EventDateTime DESC,SS_CC.FirstName DESC,SS_CC.LastName DESC
) t
ORDER BY EventDateTime DESC,FirstName DESC,LastName DESC
OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY
)
GO
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。