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 資料庫 任務...