CREATE PROCEDURE [dbo].[sp_GetPageWiseData]
(
@tableName sysname,
@orderColumn nvarchar(100),
@PageIndex INT = 1,
@PageSize INT = 10,
@RecordCount varchar(10) OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query varchar(2000),
@minimumIndex varchar(5),
@maximumIndex varchar(5)
SET @minimumIndex=convert(varchar,(@PageIndex - 1) * @PageSize + 1)
SET @maximumIndex=convert(varchar,@PageIndex * @PageSize)
SET @query='SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderColumn + ' ASC)AS RowNumber,* INTO #Results FROM ' + @tableName + ';
SELECT ' + @RecordCount + '=COUNT(*) FROM #Results;
SELECT * FROM #Results WHERE RowNumber BETWEEN ' + @minimumIndex + ' AND ' + @maximumIndex + ';
DROP TABLE #Results'
Exec (@query)
END
问题是当程序执行时,输出参数
@RecordCount
显示NULL值。
为什么?
请解释一下。 谢谢
您的查询必须是这样的:
SET @query='SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderColumn + ' ASC)AS RowNumber,* INTO #Results FROM ' + @tableName + ';
SELECT @RecordCount =COUNT(*) FROM #Results;
SELECT * FROM #Results WHERE RowNumber BETWEEN ' + @minimumIndex + ' AND ' + @maximumIndex + ';
DROP TABLE #Results';
但是这里系统会要求你声明变量,@RecordCount
所以你可以通过从查询中返回 2 个数据集来做到这一点;
SET @query='DECLARE @RecordCount varchar(10); SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderColumn + ' ASC)AS RowNumber,* INTO #Results FROM ' + @tableName + ';
SELECT @RecordCount =COUNT(*) FROM #Results;
SELECT * FROM #Results WHERE RowNumber BETWEEN ' + @minimumIndex + ' AND ' + @maximumIndex + ';
SELECT @RecordCount AS TOTALRECORDS;
DROP TABLE #Results';
我认为你不能这样使用它。这就像串联而不是赋值方法。我认为你应该分两步处理,如下所示:
SET @query='SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderColumn + ' ASC)AS RowNumber,* INTO #Results FROM ' + @tableName + ';'
Exec (@query)
SELECT @RecordCount =COUNT(*) FROM #Results
SET @query='SELECT * FROM #Results WHERE RowNumber BETWEEN ' + @minimumIndex + ' AND ' + @maximumIndex + ';
DROP TABLE #Results'
Exec (@query)