Sql 使用ROW_NUMBER()和COUNT(*)时如何设置out参数
当将行数与计数*一起使用时,如何设置此tsql proc的out@Total参数Sql 使用ROW_NUMBER()和COUNT(*)时如何设置out参数,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,当将行数与计数*一起使用时,如何设置此tsql proc的out@Total参数 ALTER proc [Generic].[proc_GetPartsForUser_BySupplier_ByCategory] @UserID UNIQUEIDENTIFIER, @SupplierID INT, @CategoryID INT, @StartIndex INT, @PageSize INT, @Total INT out AS SET NOCOUN
ALTER proc [Generic].[proc_GetPartsForUser_BySupplier_ByCategory]
@UserID UNIQUEIDENTIFIER,
@SupplierID INT,
@CategoryID INT,
@StartIndex INT,
@PageSize INT,
@Total INT out
AS
SET NOCOUNT ON;
SET @StartIndex = @StartIndex + 1
BEGIN
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY ID ASC) AS RowNum, COUNT(*) OVER() AS Total
FROM (
SELECT p.*,
s.Name'SupplierName',s.Email'SupplierEmail',s.Phone'SupplierPhone'
FROM [Generic].[Part] p WITH(NOLOCK) JOIN
Generic.Supplier s WITH(NOLOCK) ON p.SupplierID = s.ID
WHERE p.ID IN(SELECT up.PartID FROM Generic.GenericCatalog gc with(nolock) JOIN
Generic.UserPart up WITH(NOLOCK) ON up.GenericCatID = gc.ID
WHERE gc.UserID = @UserID)
AND
CategoryID = @CategoryID
AND
s.ID = @SupplierID
) AS firstt
) AS final
WHERE RowNum BETWEEN @StartIndex AND (@StartIndex + @pageSize) - 1
ORDER BY final.[Name] ASC;
END;
SET NOCOUNT OFF;
简单的答案是你不能! OVER子句创建了一个窗口函数,这意味着它将返回每一行的值!参数只能存储一个值 问题是,你为什么要这样做? 如果整个查询的目的是返回COUNT*的值,那么只需在不使用OVER子句的情况下使用它,如下所示:
SELECT @Total = COUNT(*)
FROM (SELECT p.*,
s.NAME 'SupplierName',
s.EMAIL'SupplierEmail',
s.PHONE'SupplierPhone'
FROM [Generic].[PART] p WITH(NOLOCK)
JOIN GENERIC.SUPPLIER s WITH(NOLOCK)
ON p.SUPPLIERID = s.ID
WHERE p.ID IN(SELECT up.PARTID
FROM GENERIC.GENERICCATALOG gc WITH(NOLOCK)
JOIN GENERIC.USERPART up WITH(NOLOCK)
ON up.GENERICCATID = gc.ID
WHERE gc.USERID = @UserID)
AND CATEGORYID = @CategoryID
AND s.ID = @SupplierID) AS firstt
如果您需要的不止这些,请编辑您的问题,我会尝试为您找到更好的答案。您希望在@Total参数中插入什么值?OVER AS Total,我需要将OVER AS Total中可用的记录总数设置为@Total outGidil,我正在分页记录。这对你来说不是很明显吗?@AlumCloud.Com对你来说是不是很明显over不受RowNum BETWEENYes的影响,但我想问一下,因为我不确定是否有其他方法来设置out参数。