@fldName Varchar(2000), -- 顯示字段名
@strFrom Varchar(2000), -- 關鍵字From後的表名(注意:不用加From)
@strWhere Varchar(2000), -- 查詢條件 (注意: 不要加 where)
@strOrder Varchar(200), -- 排序字段名
@OrderType Bit = 0, -- 默認0:倒序,非0: 升序
@PageSize Int = 10, -- 記錄條數
@PageIndex Int = 1 -- 頁碼
AS
Declare @strSQL Varchar(8000) -- 主語句
Declare @strTmp Varchar(1000) -- 臨時變量
Declare @strOrderBy Varchar(500) -- 排序類型
If @strWhere =''
Begin
Set @strWhere = '1=1'
End
If @OrderType != 0
Begin
Set @strTmp = '< (Select Min(' + SubString(@strOrder,CharIndex('.',@strOrder)+1,200) + ')'
Set @strOrderBy = ' Order By '+ @strOrder + ' Desc '
End
Else
Begin
Set @strTmp = '> (Select Max(' + SubString(@strOrder,CharIndex('.',@strOrder)+1,200) + ')'
Set @strOrderBy = ' Order By '+ @strOrder +' Asc '
End
If @PageIndex = 1
Begin
Set @strSQL = ' Select Top ' + Str(@PageSize) +' ' + @fldName + ' From ' + @strFrom +
' Where ' + @strWhere + @strOrderBy
End
Else
Begin
Set @strSQL = 'Select Top ' + Str(@PageSize) + ' ' + @fldName + ' From ' + @strFrom
+' Where '+ @strWhere + ' And '+ @strOrder + ' '+ @strTmp + ' From ( '
+' Select Top ' + Str((@PageIndex-1)*@PageSize) + ' ' + @fldName + ' From '
+ @strFrom + ' Where ' + @strWhere + ' ' + @strOrderBy + ' ) As tblTemp )'+ @strOrderBy
End
--print (@strSQL)
Exec (@strSQL)
--返回記錄總數
Exec('Select Count(*) As RecordCount From ' + @strFrom + ' Where ' + @strWhere)
--Exec sp_GetRecordFromPage '顯示字段名','表名','查詢條件','排序列名',排序方式,頁大小,頁碼
--Exec sp_GetRecordFromPage 'RoleId,RoleName','Roles','','RoleName',0,3,2
Go
參考網上資料,自己再修改,練習SQL分頁存儲過程.支持多表聯合查詢.未經過正規測試(還不懂,要學習),性能一般.歡迎指點.
調用方法可以,暫時想到就這三種:
1.
2.
3.