第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多表分頁存儲過程, 這樣寫會不會出問題

多表分頁存儲過程, 這樣寫會不會出問題

絕地無雙 2018-12-07 10:08:00
USE [MFProNew]GO/****** 對象: StoredProcedure [dbo].[GetRecordByPage] 腳本日期: 02/12/2011 10:13:23 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[GetRecordByPage](@tblName nvarchar(400), ----要顯示的表或多個表的連接@fldName nvarchar(4000) = '*', ----要顯示的字段列表@pageSize int = 1, ----每頁顯示的記錄個數(shù)@page int = 10, ----要顯示那一頁的記錄@pageCount int = 1 output, ----查詢結果分頁后的總頁數(shù)@Counts int = 1 output, ----查詢到的記錄數(shù)@fldSort nvarchar(200) = null, ----排序字段列表或條件@Sort bit = 1, ----排序方法,0為升序,1為降序(如果是多字段排列Sort指代最后一個排序字段的排列順序(最后一個排序字段不加排序標記)--程序傳參如:' SortA Asc,SortB Desc,SortC ')@strCondition nvarchar(4000) = null, ----查詢條件,不需where@ID nvarchar(150), ----主表的主鍵@Dist bit = 0 ----是否添加查詢字段的 DISTINCT 默認0不添加/1添加)ASSET NOCOUNT ONDeclare @sqlTmp nvarchar(4000) ----存放動態(tài)生成的SQL語句Declare @strTmp nvarchar(4000) ----存放取得查詢結果總數(shù)的查詢語句Declare @strID nvarchar(4000) ----存放取得查詢開頭或結尾ID的查詢語句Declare @strSortType nvarchar(10) ----數(shù)據(jù)排序規(guī)則ADeclare @strFSortType nvarchar(10) ----數(shù)據(jù)排序規(guī)則BDeclare @SqlSelect nvarchar(50) ----對含有DISTINCT的查詢進行SQL構造Declare @SqlCounts nvarchar(50) ----對含有DISTINCT的總數(shù)查詢進行SQL構造if @Dist = 0begin set @SqlSelect = 'select ' set @SqlCounts = 'Count(*)'endelsebegin set @SqlSelect = 'select distinct ' set @SqlCounts = 'Count(DISTINCT '+@ID+')'endif @Sort=0begin set @strFSortType=' ASC ' set @strSortType=' DESC 'endelsebegin set @strFSortType=' DESC ' set @strSortType=' ASC 'end--------生成查詢語句----------此處@strTmp為取得查詢結果數(shù)量的語句if @strCondition is null or @strCondition='' --沒有設置顯示條件begin set @sqlTmp = @fldName + ' From ' + @tblName set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName set @strID = ' From ' + @tblNameendelsebegin set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition set @strID = ' From ' + @tblName + ' where (1>0) ' + @strConditionend----取得查詢結果總數(shù)量-----exec sp_executesql @strTmp,N'@Counts int out ',@Counts outprint @strTmpdeclare @tmpCounts intif @Counts = 0 set @tmpCounts = 1else set @tmpCounts = @Counts --取得分頁總數(shù) set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize /**//**當前頁大于總頁數(shù) 取最后一頁**/ if @page>@pageCount set @page=@pageCount --/*-----數(shù)據(jù)分頁2分處理-------*/ declare @pageIndex int --總數(shù)/頁大小 declare @lastcount int --總數(shù)%頁大小 set @pageIndex = @tmpCounts/@pageSize set @lastcount = @tmpCounts%@pageSize if @lastcount > 0 set @pageIndex = @pageIndex + 1 else set @lastcount = @pagesize --//***顯示分頁 if @strCondition is null or @strCondition='' --沒有設置顯示條件 begin if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分數(shù)據(jù)處理 begin set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName +' order by '+ @fldSort +' '+ @strFSortType+')' +' order by '+ @fldSort +' '+ @strFSortType end else begin set @page = @pageIndex-@page+1 --后半部分數(shù)據(jù)處理 if @page <= 1 --最后一頁數(shù)據(jù)顯示 set @strTmp=@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName +' order by '+ @fldSort +' '+ @strSortType else set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName +' order by '+ @fldSort +' '+ @strSortType+')' +' order by '+ @fldSort +' '+ @strSortType end end else --有查詢條件 begin if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分數(shù)據(jù)處理 begin set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName +' from '+@tblName +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName +' Where (1>0) ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType+')' +' ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType end else begin set @page = @pageIndex-@page+1 --后半部分數(shù)據(jù)處理 if @page <= 1 --最后一頁數(shù)據(jù)顯示 set @strTmp=@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName +' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType else set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName +' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+')' + @strCondition +' order by '+ @fldSort +' '+ @strSortType end end------返回查詢結果-----print @strTmpexec sp_executesql @strTmp--print @strTmpSET NOCOUNT OFF ?
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

個人感覺沒有必要過分追求通用吧,這種方式即使成功實現(xiàn)了,執(zhí)行效率也是問題吧。

還是根據(jù)具體的業(yè)務邏輯,分別實現(xiàn)分頁存儲過程,這樣邏輯更清晰、結構更合理,針對特定的語句也可以進行優(yōu)化,執(zhí)行效率更好。

查看完整回答
反對 回復 2019-01-07
  • 1 回答
  • 0 關注
  • 438 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號