SQL 2012新版分頁儲存

2021-09-21 18:11:50 字數 3040 閱讀 6605

sql_2012新版分頁儲存

alter procedure [dbo].[pagingstoredprocedure]

@tablename varchar(max) , --表名

@fields varchar(2000) , --返回字段(多個以逗號分隔)

@keyfield varchar(2000), --唯一鍵,為空時採用row_number分頁(廢棄)

@orderfields varchar(2000) , --排序字段(多個以逗號分隔)例:a desc,b asc

@where varchar(max) , --查詢條件 例1:where id=1 ;例2 and id=1

@pagesize int , --頁尺寸

@pageindex int , --頁碼

@total int output --返回總記錄數

as declare @sql varchar(max) --主語句

declare @ordersql varchar(200) --排序

declare @totalsql nvarchar(max) --查詢記錄總數主語句

declare @whereindex int

set @whereindex = charindex('where',@where,0)

--條件sql

if @whereindex = 0 or @whereindex > 10

set @where = ' where 1=1 ' + @where --p.domain_id = 1 and p.valid = 1

else

set @where=' '+@where

--排序sql

set @ordersql = ' order by ' + @orderfields --p.id desc

--------------總記錄數---------------

if @pageindex=0

set @pageindex = 1

set @total = 0

--查詢總記錄數進行賦值

set @totalsql = 'select @totalcout=count(*) from ' + @tablename +' '+ @where

exec sp_executesql @totalsql, n'@totalcout int output', @total output

set @sql = 'select '+ @fields +' from '+ @tablename + @where

declare @sqlcount nvarchar(max)

set @sql = @sql + @ordersql +' offset '+ cast(@pagesize * (@pageindex-1) as varchar(10)) + ' rows fetch next '+cast(@pagesize as varchar)+' rows only '

print(@sql)

exec(@sql)

舊版本分頁儲存

alter  procedure [dbo].[getpage]

@tblname varchar(1000), -- 表名(必要引數)

@fields varchar(1000)='*', --要返回的列,要保證沒有名稱的列有別名

@pagesize int = 25, -- 頁尺寸

@pageindex int = 1, -- 頁碼

@ordertype varchar(50) = '', -- 設定排序型別,不要加order by

@strwhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)

as begin

declare @mycount varchar(2000)---此變數儲存sql語句,用於獲得符合條件的記錄總數

declare @strsql varchar(2000)----此變數儲存sql語句,用於獲得符合條件的記錄

if @ordertype=''

set @ordertype='getdate()'

if(@strwhere='')

begin

set @mycount='select count(*) from '+@tblname

set @strsql='select * from (select top ('+cast(@pagesize*@pageindex as varchar(10))+') row_number()over(order by '+@ordertype+') rownumber,'+@fields+' from '+@tblname+') t where rownumber>'+cast((@pageindex-1)*@pagesize as varchar(10))

endelse

begin

set @mycount='select count(*) from '+@tblname+' where '+@strwhere

set @strsql='select * from (select top ('+cast(@pagesize*@pageindex as varchar(10))+') row_number()over(order by '+@ordertype+') rownumber,'+@fields+' from '+@tblname+' where '+@strwhere+') t where rownumber>'+cast((@pageindex-1)*@pagesize as varchar(10))

end

exec(@strsql)

exec(@mycount)

end

sql 2012之後分頁查詢速度問題

一.sql server 2012使用offset fetch next分頁,比sql server 2005 2008中的rownumber 有顯著改進。今天特地作了簡單測試,現將過程分享如下 dbcc dropcleanbuffers dbcc freeproccache setstatisti...

SQL 2012中文亂碼

ms sql插入漢字的時候。常常會遇到部分漢字變成了亂碼問號了,所以在安裝資料庫或者在建立表的時候須要注意一下幾點 1 儲存漢字的字段要用nvarchar nchar ntext等。插入的時候要用n 漢字 2 安裝資料庫的時候,選擇chinese prc ci as排序規則,假設是其它的排序規則能夠...

Sql2012資料庫還原

sql2012資料庫還原 通過.bak資料庫備份檔案 昨天系統掛了,那叫乙個悲慘,重灌了系統,但是sql2012的資料沒有備份,同事幫忙發來備份檔案 bak 開始還原資料。步驟 1 自己新建乙個資料庫,這個資料庫就是最終還原的資料庫。圖1 圖一2 右擊 shu ju huan yuan 資料庫 任務...