日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

字符串緩存實現的通用分頁存儲過程.sql

系統 2566 0

CREATE PROC sp_PageView
@tbname???? sysname,?????????? ?--要分頁顯示的表名
@FieldKey?? sysname,?????????? ?--用于定位記錄的主鍵(惟一鍵)字段,只能是單個字段
@PageCurrent int=1,???????????? ?--要顯示的頁碼
@PageSize?? int=10,??????????? ?--每頁的大小(記錄數)
@FieldShow? nvarchar(1000)='',? ?--以逗號分隔的要顯示的字段列表,如果不指定,則顯示所有字段
@FieldOrder? nvarchar(1000)='', ?--以逗號分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
????????????????????????????????????????? 用于指定排序順序
@Where???? nvarchar(1000)='',? ?--查詢條件
@PageCount? int OUTPUT??????? ?--總頁數
AS
DECLARE @sql nvarchar(4000)
SET NOCOUNT ON
--檢查對象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
?RAISERROR(N'對象"%s"不存在',1,16,@tbname)
?RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
?AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
?AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
?RAISERROR(N'"%s"不是表、視圖或者表值函數',1,16,@tbname)
?RETURN
END

--分頁字段檢查
IF ISNULL(@FieldKey,N'')=''
BEGIN
?RAISERROR(N'分頁處理需要主鍵(或者惟一鍵)',1,16)
?RETURN
END

--其他參數檢查及規范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
?SET @FieldOrder=N''
ELSE
?SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
?SET @Where=N''
ELSE
?SET @Where=N'WHERE ( '+@Where+N')'

--如果@PageCount為NULL值,則計算總頁數(這樣設計可以只在第一次計算總頁數,以后調用時,把總頁數傳回給存儲過程,避免再次計算總頁數,對于不想計算總頁數的處理而言,可以給@PageCount賦值)
IF @PageCount IS NULL
BEGIN
?SET @sql=N'SELECT @PageCount=COUNT(*)'
??+N' FROM '+@tbname
??+N' '+@Where
?EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
?SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END

--計算分頁顯示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
?@TopN1=@PageCurrent*@PageSize?

--第一頁直接顯示
IF @PageCurrent=1
?EXEC(N'SELECT TOP '+@TopN
??+N' '+@FieldShow
??+N' FROM '+@tbname
??+N' '+@Where
??+N' '+@FieldOrder )
ELSE
BEGIN
?SELECT @PageCurrent=@TopN1,
??@sql=N'SELECT @n=@n-1,@s=CASE WHEN @n< '+@TopN
???+N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST( '+@FieldKey
???+N' as varchar(8000))),N'''''''') ELSE N'''' END FROM '+@tbname
???+N' '+@Where
???+N' '+@FieldOrder
?SET ROWCOUNT @PageCurrent
?EXEC sp_executesql @sql,
?? N'@n int,@s nvarchar(4000) OUTPUT',
??@PageCurrent,@sql OUTPUT
?SET ROWCOUNT 0
?IF @sql=N''
??EXEC(N'SELECT TOP 0'
???+N' '+@FieldShow
???+N' FROM '+@tbname )
?ELSE
?BEGIN
??SET @sql=STUFF(@sql,1,1,N'')??
??--執行查詢
??EXEC(N'SELECT TOP '+@TopN
???+N' '+@FieldShow
???+N' FROM '+@tbname
???+N' WHERE '+@FieldKey
???+N' IN( '+@sql
???+N') '+@FieldOrder )
?END
END

字符串緩存實現的通用分頁存儲過程.sql


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 新安县| 宁晋县| 湖北省| 英超| 铅山县| 寻甸| 昌平区| 兖州市| 禹州市| 江安县| 宁远县| 深水埗区| 玉溪市| 拉萨市| 汝城县| 曲周县| 米泉市| 晋城| 双峰县| 美姑县| 诸城市| 衡阳市| 吉木乃县| 仙游县| 洛扎县| 彰化市| 肥城市| 当阳市| 蒲江县| 临洮县| 阳城县| 靖安县| 绥棱县| 贵州省| 三台县| 潮州市| 宁明县| 平湖市| 肇东市| 临高县| 成都市|