TSQL输出行数

时间:2014-06-29 20:45:53

标签: php sql sql-server

我有一个以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');

我正在将offsetrows传递给存储过程,因为我正在使用分页。它正在获取该页面的记录,限制为X行。

即使我说接下来的10条记录,它可能只剩下8条记录了。那是我需要回归的;它在select语句中找到的总记录。

最好是在存储过程中还是在遍历记录的php中执行此操作?

2 个答案:

答案 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是每个会话,所以只要你没有结束你的连接,就应该没问题。