共通の記憶手順


。/ ******オブジェクト:のStoredProcedure [DBO] [usp_CommonDataResourcePaged]スクリプト日:2018年4月20日9時01分14秒****** /
ON SET ANSI_NULLS
GO
ON SET QUOTED_IDENTIFIER
GO
- === ==========================================

-説明:<共通データページストアドプロシージャ>
- ==================================== =========
PROCEDURE [DBO]。[usp_CommonDataResourcePaged】作成

@tablenameに表示されるデータ型はnvarchar(200)で、----以上の表接続
@FieldListのNVARCHAR(1500)= '* ' 表示される項目のリスト----
@PageSize INT = 20、----表示あたりのレコードの数
= 1 @PageNumber int型、----記録することを示す
@SortFieldsのNVARCHAR(1000) = NULL、----ソートフィールドまたは条件のリスト
@EnabledSortビット= 0、----ソート方法は、順序が最後の(最終のソートソートフィールドを参照する場合1(複数のフィールドの配置を降順、0昇順でありますフラグを注文せずにソートフィールド) -のようなプログラムの伝送パラメータ: 'みかん昇順(ASC)SortB、SortC')
@QueryConditionのNVARCHAR(1500 WHEREなし)= NULL、----クエリ
@PrimaryKey NVARCHAR(50)メインキー----メインテーブル
@EnabledDistinctビット= 0、----デフォルト0/1を追加することなく、DISTINCTクエリフィールドを追加するかどうかは、追加
、合計のページの後@PageCount int型= 1出力、----クエリ結果のページを番号
@RecordCount INT =レコード数----出力1への照会

AS
ON SET NOCOUNT
宣言@SqlResultのデータ型はnvarchar(1000)----動的に生成されたSQL文は、保存された
----預金製の宣言@SqlTotalCountのデータ型はnvarchar(1000)クエリ結果の総数は
@SqlStartOrEndID NVARCHAR(1000)----クエリIDクエリの先頭または末尾に作ら預金宣言する

宣言@SortTypeAのNVARCHAR(10)---- Aデータ照合
宣言@SortTypeBのNVARCHAR(10) - B ---データ照合

宣言@SqlDistinct NVARCHAR(50)----たDISTINCTクエリSQLコンストラクトを含む
(50)@SqlCountDistinct NVARCHARを宣言---- DISTINCT SQLコンストラクトを含むクエリの総数が

@timediff日時を宣言する-差分時間テストを消費
SELECT @ timeDiff = GETDATE()

= 0が@EnabledDistinctのIF
始める
SET @SqlDistinct = 'SELECT'
SET @SqlCountDistinct = 'COUNT(*)'が
終了し
、他の
開始
SET @SqlDistinct = 'DISTINCT SELECT'
SET @SqlCountDistinct = 'カウントを(DISTINCT' + @ +のPrimaryKey ')'
終了

= 0 @ EnabledSortのIF
インクルード開始
@ SortTypeB = 'ASC' SET
SET @ SortTypeA = 'DESC'の
終了

始める
セットを@ = SortTypeB「DESC」
SET @ SortTypeA =「ASC」
終了

-------- --------は、クエリを生成する
-この場合の@SqlTotalCountにクエリ結果文の数を取得するために
@QueryConditionがnullの場合またはQueryCondition @ = ' - '表示条件が設定されていない
インクルードを始める
から'+ @tablename @SqlResult + = @FieldListセット'
セット@SqlTotalCount SqlDistinct @ + = '@RecordCount =' + + @ SqlCountDistinct '@ +' FROMテーブル名
SET = @SqlStartOrEndID "'+ @tablenameから
終わり
そうでありません
開始
+ @tablename + 'から'セット@SqlResult = + @FieldList + 'WHERE(1> 0)と' + @QueryCondition
セット@SqlTotalCount = @ SqlDistinct +」@RecordCount = '+ @ SqlCountDistinct +'から'+ @テーブル名+' (1> 0)と'+ @QueryCondition
セット@SqlStartOrEndID = '+ @tablename +'からWHERE(1> 0)と' + @QueryCondition


----取得查询结果总数量-----
EXEC sp_executesqlを@ SqlTotalCount、N '@ RecordCountをint型アウト'、出たRecordCount @

@TemporaryCount int型を宣言-一時的な統計
IF @RecordCount = 0
SET @TemporaryCount = 1
、他の
SET @TemporaryCount = @RecordCount

-総ページ数を取得
SET @PageCount =(@ + @ TemporaryCountがPageSize-1)/のPageSize @

/ **現在ページ総ページ数は、最後に撮影した1以上である** /
@PageNumber> @PageCountのIF
のSET @ = PAGENUMBER PAGECOUNT @

- / * -----データ処理サブページ2 * ------- /
DECLARE @pageIndex int型-合計/ページサイズ
の合計%ページサイズ-宣言@lastcount int型

SET @pageIndex TemporaryCount = @ / @のPageSize
lastcount%@ = @ TemporaryCountがPageSize @ SET
@lastcount> 0 IF
。SETの+ 1 @pageIndex = @pageIndex
他の
SET @ = @pagesize lastcount

-ページの表示// ***
@QueryConditionがnullの場合、または@ QueryCondition = '' -没有设置显示条件
始める
@pageIndex <2又は@PageNumber <= @ pageIndexパラメータ/ 2 + @pageIndex%2場合-前半部分数据处理が
始まる
@ページ番号= 1個の場合
セット@ SqlTotalCount = @ SqlDistinct + 'TOP '+ '+ + @SortFields'で'+ @テーブル名+' ORDER FROM CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +'' + @SortTypeB

始める
@ EnabledSort =場合1
始める
'+ @ TableNameにFROM SqlTotalCount = @ SqlDistinct + 'TOP '+ CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +' @設定
+' WHERE '+ @主キー+'<(+'(MINを選択@主キー+ ')FROM(' + @ SqlDistinct + 'TOP '+ CAST(@PageSize *(@ページ番号-1)、VARCHAR(20)のように)'' ++ @Primarykey + + @テーブル名 'FROM'
+ + ' '+ @ SortTypeB +' + @SortFields 'BY ORDER')TBMinID) '+' ORDER AS '+ @SortFields +' '+ @SortTypeB BY
終わり
、他には
始める
SqlTotalCount = @ SqlDistinct +' TOP' + CAST(@設定@ '+ @ TableNameにFROM VARCHARとしてのPageSize(4))+ ' '+ @のFieldList +'
+' WHERE '+ @主キー+'> CAST +( '+ @ SqlDistinct +' TOP'から(MAX( '+ @Primarykey +'を選択) (VARCHAR(20)として@PageSize *が(@ページ番号-1))+ ' '+ @Primarykey +' '+ @ TableNameがFROM
'+ @ SortTypeB + '+ + @SortFields' BY +' ORDER')TBMinID AS)' + 'ORDER BY '+ @SortFields +''@SortTypeB +
エンド
エンド
エンド
他を
始める
SET @PageNumber PAGENUMBER + @ = @ pageIndex-を1 - 。データ処理の後半
@PageNumber <= 1の場合-最後のデータを
SqlTotalCount = @ SqlDistinct + @設定'+ @ TableNameにFROM CAST VARCHARとして(@lastcount(4))+ ' '+ @のFieldList +' + + @ SqlDistinct + 'TOP'」*(FROM'
'+ + @SortFields' BY +' ORDER '+ @ SortTypeA +')TempTB '+' ORDER AS BY '+ @SortFields +' '+ @SortTypeB

@ EnabledSort = 1場合
始める
CAST(+ + @ SqlDistinct +' TOP」 '(* FROM' SqlTotalCount = @ SqlDistinct + @設定'+ @ TableNameにFROM VARCHARとして@PageSize(4))+ ' '+ @のFieldList +'
+' WHERE '+ @主キー+'>( '+ @ SqlDistinct +' TOP' + FROM(MAX( '+ @Primarykey +'を選択) '+ @テーブル名からキャスト(@PageSize *(@ページ番号-2)、VARCHAR(20)として+ @ lastcount)+ ' '+ @Primarykey +'
' + BY' ORDER+ @SortFields + ' '+ @ SortTypeA +')TBMaxID AS)'
BY + 'ORDER '+ @SortFields +' '+ @ SortTypeA + + 'BY ORDER '')TempTB AS' + @SortFields +'' + @SortTypeB
終了

始める
設定@ SqlTotalCount = @ SqlDistinct + '*(FROM '+ @ SqlDistinct +' TOP '+ CAST(@PageSizeはVARCHAR(4))+' '+ @のFieldList +' FROM '+ @テーブル名
+' WHERE' + @主キー+ VARCHAR(20)として'<(MIN(SELECT' + CAST(@PageSize *(@ページ番号-2)+ @ SqlDistinct + 'TOP ' '(FROM)' + @Primarykey +を+ @ lastcount)+'' + + @Primarykey + @テーブル名'FROM '
TBMaxID AS + @SortFields + ' '+ @ SortTypeA +' +' BY ORDER'))'
+ 'BY ORDER ' 'TempTB AS)' '+ @SortFields +'' + @ SortTypeA + BY +' ORDER + @SortFields +」「+ @SortTypeB
エンド
エンド
エンド

他の-有查询条件
始める
場合@pageIndex <2または@PageNumber <= @ pageIndexパラメータ/ 2 + @ pageIndexパラメータ% 2 -データの前半の処理
を開始する
。@ = IF 1ページ番号
'+ @ TableNameにFROM SqlTotalCount = @ SqlDistinct + 'TOP '+ CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +' @設定
+' 1 = 1及び'+ @QueryCondition +' ORDER +'によって@ '+ @SortTypeBのSortFields +」
他(@ EnabledSort = 1)場合に
開始
SqlTotalCount = @ SqlDistinct + @設定' + @ TableNameが'FROM 'TOP '+ CAST(VARCHARとして@PageSize(4))+'' + @のFieldList +
+' WHERE '+主キー+' <( 'CAST(VARCHAR(20)として@PageSize *(@ページ番号-1))+ +'「+( '+ @ SqlDistinct +'上からMIN( '+ @Primarykey +')を選択し@ + @テーブル名' 'から主キー+
)'(= 1)と'+ ' '+ @ SortTypeB +' + @SortFields + @QueryCondition +' BY ORDER' + TBMinID) '+' ORDER AS'によっては+ @SortFields +」「+ @SortTypeB
終わり
、他の
開始
'+ @ TableNameにFROM SqlTotalCount = @ SqlDistinct + 'TOP '+ CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +' @設定
+' WHERE '+ @主キー+'>(+ @Primarykey +'(MAXを選択')FROM(' + @ SqlDistinct +」TOP '+ CAST(@PageSize *(@ページ番号-1)としてVARCHAR(20))+' '+ @Primarykey +'から'+ @テーブル名
+'(= 1)そして、 'TBMinID AS))' '+ @ SortTypeB + '+ + @SortFields'で'+ @QueryCondition +' ORDER +' ORDER BY '+ @SortFields +'「+ @SortTypeB
エンド・
エンド

始める
@PageNumber = @ pageIndex-設定@ページ番号+ 1 -后半部分数据处理
場合@PageNumber <= 1 -最后一页数据显示
設定@ SqlTotalCount = @ SqlDistinct + '*(FROM '+ @ SqlDistinct +' TOP'+ CAST '+ @テーブル名FROM(VARCHARとして@lastcount(4))+' '+ @のFieldList +'
+ 'WHERE(= 1 1)と'+ ' '+ @ SortTypeA +' + @SortFields + @QueryCondition +' BY ORDER')BY TempTB '+' ORDER '+ @SortFields +' AS' + @SortTypeB
(もしそうでなければ@ EnabledSort = 1)
'+ @テーブル名から'(+ @ SqlDistinct + 'TOP '+ CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +' * FROM' SqlTotalCount = @ SqlDistinct + @設定
' + +' @主キー+ '>(MAX(SELECT '+ @ SqlDistinct + 'TOP ''(FROM)' + @Primarykey +を+ CAST(@PageSize *(@ページ番号-2)、VARCHAR(20)として+ @ lastcount)+'' + @Primarykey + + @ TableNameが」FROM '
')WHERE(= 1)と'+ ' '+ @ SortTypeA +' + @SortFields + @QueryCondition +' BY ORDER' + BY TBMaxID) '+' ORDER '+ @SortFields +' AS '+ @ SortTypeA +') '+ @SortFields +'「+ @SortTypeB BY TempTB '+' ORDER AS

'+ @テーブル名FROM CAST(VARCHARとして@PageSize(4))+' '+ @のFieldList +' + + @ SqlDistinct + 'TOP「(* FROM' SqlTotalCount = @ SqlDistinct + @設定
+' WHERE '+ @主キー+'(< MIN( '+ @Primarykey +')( '+ @ SqlDistinct +'上からSELECT '+ CAST(@PageSize *(@ページ番号-2)+ @ lastcount VARCHAR(20)のような)+' '+ @Primarykey +' 'から+ @テーブル名
+ 'WHERE(= 1)と'+ ' '+ @ SortTypeA +' + @SortFields + @QueryCondition +' BY ORDER')でTBMaxID) '+' ORDER '+ @SortFields +'' + @ SortTypeA + AS ')TempTB AS' + + @SortFields + ' '+ @SortTypeB' ORDER BY'
末端


------返回查询结果-----
EXEC sp_executesqlを@SqlTotalCount
--select DATEDIFF timediff @(MS、GETDATE())耗时として
@SqlTotalCount印刷
SET NOCOUNTをOFF

 

---------------------------------------------ストアドプロシージャのASPを呼び出します。 ENTの
DECLARE @return_value int型、int型@PageCount、int型@RecordCount

@PageCount = 0 SELECT @RecordCount = 0を選択

EXEC @return_value = [DBO]。[usp_CommonDataResourcePaged]
@tablename = N '[DBO] [学生]'、
@FieldList = N '[StudentID]、[番号]、[名前]、[たClassID]'、
@PageSize = 30、
@PageNumber = 50、
@SortFields = [StudentID]、
@EnabledSort = N'1' 、
@QueryCondition = N ''、
@Primarykey = N '[StudentID]'、
@EnabledDistinct = 1、
@PageCount = @PageCount OUTPUT 、
@RecordCount = @RecordCount OUTPUT

N '@のPAGECOUNT'、@RecordCount N 'の@のRecordCount' などとして@PageCount SELECT

SELECT '戻り値' = @return_value
GO

 

------------------------------
/// <まとめ>
EFページングストアド・プロシージャ・コールに/// LINQ
/// < /要約>
/// <PARAM NAME = "NUM"> </ param>の
公共ボイドloada(NUMをint型)
{
VARのparamは=新しい新しいリスト<SqlParameter>();
ストアドプロシージャパラメータ受信//定義配列
param.Addを(新しいですSqlParameter( "@のテーブル名"、 "学生")); // テーブル名
param.Add(新しいSqlParameter( "@ののFieldList "、 "StudentID、番号、名前、のClassID")); // 表示欄
param.Add(新SqlParameter( "@がPageSize"、10 )); // 番号表示バー
param.Add(新しいSqlParameter( "@ののSortFields "、 "StudentID")); // ソートフィールド
(新しいSqlParameter( "@のページ番号をparam.Addを "、 NUM)); //は、そのページを表示する(ページのパラメータの受け渡し)
param.Add( "EnabledSort @"新新SqlParameter(、1));// 0は1下降、上昇さ
param.Add(新しいSqlParameter( "@のQueryConditionを "、 "")); //ここで、 条件
param.Add(新しいSqlParameter( "主キー@ "、 "StudentID")); // (唯一の代理)主キー
param.Add( "EnabledDistinct @"新新SqlParameter(、1)); // DISTINCTクエリフィールドのデフォルト値を追加するかどうか追加されていない0/1を加えた
param.Add(新しいSqlParameter( "@のPAGECOUNT "、SqlDbType.Int)); // 総ページ数を
param.Add(新しいSqlParameter( "@のRecordCountを "、SqlDbType.Int)); // 記録数
//出力パラメータは、パラメータの型を指定します

PARAM [9] .Direction = ParameterDirection.Output。
PARAM [10] .Direction = ParameterDirection.Output。

VAR DT = db.Database.SqlQuery <学生>( "RecordCountを出力@ execのusp_CommonDataResourcePaged @テーブル名、@のFieldList、@のPageSize、@ PAGENUMBER、@のSortFields、@ EnabledSort、@ QueryCondition、@ PRIMARYKEY、@ EnabledDistinct、@ PAGECOUNT出力、" 、param.ToArray())ToListメソッド()。

INTのRecordCount = Convert.ToInt32(PARAM [9] .Valueの)。
INT PAGECOUNT = Convert.ToInt32(PARAM [10] .Valueの)。
lbl_info.Text = "当前第" +のRecordCount + "页、共" + PAGECOUNT + "页"。
userinfo.DataSource = DT;
userinfo.DataBind();

 

}

おすすめ

転載: www.cnblogs.com/zpblok/p/10974266.html