我有一个以XML格式输出结果的存储过程;一切都很好。
但是我需要包括它输出的行数(如果可能的话)。
SELECT A.[id],
A.[petName],
A.[petCaption],
B.[petType],
C.[FirstName] as ownerFirstName,
C.[LastName] as ownerLastName,
A.[imageName],
(
SELECT CONVERT(varchar(20),sum(transactionAmount), 1) as totalRaised
FROM petContestTransactionsDonations
WHERE submissionID = A.[id]
FOR XML PATH ('transactionDetails'), TYPE, ELEMENTS
)
FROM petContestSubmissions as A
LEFT OUTER JOIN petContestTypes as B
ON A.[petType] = B.[id]
LEFT OUTER JOIN EmpTable as C
ON A.[empID] = C.EmpID
LEFT OUTER JOIN petContestTransactionsEntries as E
ON E.[submissionID] = A.[id]
WHERE E.[transactionStatus] = 'completed'
ORDER BY A.[id]
OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY
FOR XML PATH ('submission'), TYPE, ELEMENTS, ROOT ('root');
我正在将offset
和rows
传递给存储过程,因为我正在使用分页。它正在获取该页面的记录,限制为X行。
即使我说接下来的10条记录,它可能只剩下8条记录了。那是我需要回归的;它在select语句中找到的总记录。
最好是在存储过程中还是在遍历记录的php中执行此操作?
答案 0 :(得分:1)
如果您想要每行上的行数,请包括:
count(*) over () as RowCount
在最外面的select
子句中。
如果您想先将所有数据读入应用程序,请在应用程序层中进行。
编辑:
如果您想要查询返回的行数,那么您也可以在应用程序层中执行此操作。你也可以这样做:
select t.*, count(*) over () as RowCOunt
from (<your query here>) t;
答案 1 :(得分:0)
也许这会满足您的需求。不在同一个查询中,但您可以尝试
SELECT @@ROWCOUNT AS RowsAffected
在你的查询之后,你应该得到你想要的东西。 @@ ROWCOUNT是每个会话,所以只要你没有结束你的连接,就应该没问题。