SQL Server 2008でCTEを使用しようとしましたが、Entityフレームワークでそれを使用しています。エンティティフレームワークでCTEを使用してページングを行います
後はSPです:
CREATE PROCEDURE GetReportingCategories
-- Add the parameters for the stored procedure here
@StartRow INT,
@EndRow INT,
@SortDirection VARCHAR(50),
@SortExpression VARCHAR(50),
@TotalRecord int OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
;WITH CTE (CategoryTitle, CreatedDate, UpdatedDate, [Status], RowNumber) AS
(
SELECT CategoryTitle,
CreatedDate,
UpdatedDate,
[Status],
ROW_NUMBER() OVER(ORDER BY
case when @SortExpression='CategoryTitle' and @SortDirection='DESCENDING' then CategoryTitle end DESC,
case when @SortExpression='CategoryTitle' and @SortDirection='ASCENDING' then CategoryTitle end ASC) AS RowNumber
FROM ReportingCategory
)
SELECT * INTO #TtCTE FROM CTE;
SELECT @TotalRecord = ISNULL(SUM(1), 0) FROM #TtCTE;
SELECT *
FROM #TtCTE
WHERE RowNumber >= @StartRow AND RowNumber <= @EndRow;
END
GO
SPは完全に実行されます。しかし、問題は、VS2010のデータベースからモデルを更新した後、「関数のインポートを追加」しようとすると、列情報が取得されないことです。だから、それを消費することはできません。
エンティティフレームワークとストアドプロシージャを使用して、カスタムページなしのCTEを実装する方法をガイドしてください。おかげさまで
なぜカウント(*)の代わりにisnull(sum(1,0))を実行しましたか? – Kyle
@カイル:私は正確に覚えていませんが、このようなものです:SELECT文が何の行も返さないとき、 "TotalRecord"も0に設定されます。 – iMatoria