0
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 値が表示されることです。

なぜ?

説明してください。ありがとう

4

2 に答える 2

0

クエリは次のようにする必要があります。

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';
于 2012-06-05T06:14:44.853 に答える
0

このままでは使えないと思います。値の割り当て方法ではなく、連結のようなものです。次のような 2 つの手順で処理する必要があると思います。

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)
于 2012-06-05T06:24:22.890 に答える