SQL2000和SQL2005分頁儲存過程

2021-09-08 21:51:51 字數 4725 閱讀 5251

mssql 2000

set ansi_nulls on

set quoted_identifier on

goalter

procedure

[dbo

].[proc_page2000](

@tabname

nvarchar(100)=

'',--

表名、檢視名、查詢語句

@pagesize

int=

10, --

每頁的大小(行數)

@pageindex

int=

1, --

要顯示的頁 從0開始

@fieldshow

nvarchar (200)='*

', --

要顯示的字段列表

@fieldkey

nvarchar (100)='id

', --

主鍵@wherestr

nvarchar (2000)=

'1=1',

@fieldorder

int=

1, --

排序 1desc0asc

@recordcount

intoutput)as

declare

@sql

nvarchar(2000

)if (@wherestr=''

) begin

set@wherestr='

1=1'

enddeclare

@tsql

nvarchar(200)

set@tsql

=n'select @recordcount = count(1) from '+

@tabname+'

where '+

@wherestr

exec sp_executesql @tsql,n'

@recordcount int output

',@recordcount

output

if(@pageindex

>1)

begin

set@sql='

select top '+

ltrim(str(@pagesize))+''

+@fieldshow+'

from '+

@tabname+'

where '+

@wherestr

if(@fieldorder=1

)

begin

set@sql

=@sql+'

and '+

@fieldkey+'

<(select min('+

@fieldkey+'

) from (select top '+

ltrim(str(@pagesize

*(@pageindex

-1)))+''

+@fieldkey+'

from '+

@tabname+'

where '+

@wherestr+'

order by '+

@fieldkey+'

desc) as t) order by '+

@fieldkey+'

desc

'end

else

begin

set@sql

=@sql+'

and '+

@fieldkey+'

>(select max('+

@fieldkey+'

) from (select top '+

ltrim(str(@pagesize

*(@pageindex

-1)))+''

+@fieldkey+'

from '+

@tabname+'

where '+

@wherestr+'

order by '+

@fieldkey+'

asc) as t) order by '+

@fieldkey+'

desc

'end

endelse

begin

set@sql='

select top '+

ltrim(str(@pagesize))+''

+@fieldshow+'

from '+

@tabname+'

where '+

@wherestr

if(@fieldorder=1

)

begin

set@sql

=@sql+'

order by '+

@fieldkey+'

desc

'end

else

begin

set@sql

=@sql+'

order by '+

@fieldkey+'

asc'

endend

execute(@sql)

mssql 2005

set ansi_nulls on

set quoted_identifier on

goalter

procedure

[dbo

].[proce_sql2005pagechange](

@tablename

varchar(50), --

表名@refieldsstr

varchar(200) ='*

', --

欄位名(全部欄位為*)

@orderstring

varchar(200), --

排序字段(必須!支援多欄位不用加order by)

@wherestring

varchar(500) =n'', --

條件語句(不用加where)

@pagesize

int, --

每頁多少條記錄

@pageindex

int=

1 , --

指定當前為第幾頁

@totalrecord

int output --

返回總記錄數)as

begin

--處理開始點和結束點

declare

@startrecord

int;

declare

@endrecord

int;

declare

@totalcountsql

nvarchar(500

);

declare

@sqlstring

nvarchar(2000

);

set@startrecord

= (@pageindex

-1)*

@pagesize+1

set@endrecord

=@startrecord

+@pagesize-1

set@totalcountsql

= n'

select @totalrecord = count(*) from '+

@tablename;--

總記錄數語句

set@sqlstring

= n'

(select row_number() over (order by '+

@orderstring+'

) as rowid,'+

@refieldsstr+'

from '+

@tablename;--

查詢語句

--if (@wherestring! =

''or

@wherestring

!=null

)

begin

set@totalcountsql

=@totalcountsql+'

where '+

@wherestring

;

set@sqlstring

=@sqlstring+'

where '+

@wherestring

;

end--

第一次執行得到

--if(@totalrecord is null)

--begin

exec sp_executesql @totalcountsql,n'

@totalrecord int out

',@totalrecord output;--

返回總記錄數

--end

----執行主語句

set@sqlstring='

select * from '+

@sqlstring+'

) as t where rowid between '+

ltrim(str(@startrecord)) +

'and '+

ltrim(str(@endrecord

));

exec(@sqlstring

)

end

Sql2000和Sql2005共存安裝詳細過程

在安裝了sql2000的基礎上安裝sql2005的詳細過程 sql2005版本 sql2005開發版,兩張cd的那種 作業系統 window 2003 server 假設您的電腦已安裝了sql2000,下面開始安裝sql2005。一 執行光碟1 跳過 準備 步驟,直接進行 伺服器元件 工具 聯機叢書...

SQL2005的資料轉成SQL2000

直接restore或附加應該是不行的,用指令碼 導資料肯定沒有問題。2005轉到2000的步驟 1.生成for 2000版本的資料庫指令碼 2005 的manger studio 開啟 物件資源管理器 沒有的話按f8 連線到你的例項 右鍵要轉到2000的庫 任務 生成指令碼 在 指令碼嚮導 的 選擇...

SQL2000和SQL2005的行轉列處理方法

select show id year n1 n2 n3 n4 n5 from datapass db dbo test 1 sql2005中的列轉行.select show id mon,subtotal from datapass db dbo test unpivot subtotal for...