通用的可帶查詢條件的SQL語句的分頁儲存過程

2021-07-10 17:45:48 字數 2846 閱讀 1428

假設資料庫中有張表,表名是username,字段分別是id(int),name(nvarchar),age(int)。

如果不帶查詢條件儲存過程是:

create procedure [dbo].[username] 

@pageindex int, 

@pagesize int 

as declare @min int; 

declare @max int; 

set @min=@pagesize*(@pageindex-1)+1; 

set @max=@pagesize*@pageindex; 

with mytable as(select id,name,age,row_number() over (order by id) as rownum from [username] ) 

select id,name,age from mytable where  rownum between @min and @max  

return

這個分頁儲存過程很不實用,並且表是固定的。

下面十二個萬能分頁儲存過程,

create procedure [dbo].[up_getrecordbypage] 

@tblname varchar(255), -- 表名 

@fldname varchar(255), -- 主鍵欄位名 

@pagesize int , -- 頁尺寸 

@pageindex int , -- 頁碼 

@isrecount bit, -- 返回記錄總數, 非 0 值則返回 

@ordertype bit, -- 設定排序型別, 非 0 值則降序 

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

as declare @strsql varchar(6000) -- 主語句 

declare @strtmp varchar(2000) -- 臨時變數(查詢條件過長時可能會出錯,可修改100為1000) 

declare @strorder varchar(400) -- 排序型別 

if @ordertype != 0 

begin 

set @strtmp = '<(select min' 

set @strorder = ' order by [' + @fldname +'] desc' 

end 

else 

begin 

set @strtmp = '>(select max' 

set @strorder = ' order by [' + @fldname +'] asc' 

end 

set @strsql = 'select top ' + str(@pagesize) + ' * from [' 

+ @tblname + '] where [' + @fldname + ']' + @strtmp + '([' 

+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' [' 

+ @fldname + '] from [' + @tblname + ']' + @strorder + ') as tbltmp)' 

+ @strorder 

if @strwhere != '' 

set @strsql = 'select top ' + str(@pagesize) + ' * from [' 

+ @tblname + '] where [' + @fldname + ']' + @strtmp + '([' 

+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' [' 

+ @fldname + '] from [' + @tblname + '] where ' + @strwhere + ' ' 

+ @strorder + ') as tbltmp) and ' + @strwhere + ' ' + @strorder 

if @pageindex <> 0 

begin 

set @strtmp ='' 

if @strwhere != '' 

set @strtmp = ' where ' + @strwhere 

set @strsql = 'select top ' + str(@pagesize) + ' * from [' 

+ @tblname + ']' + @strtmp + ' ' + @strorder 

exec (@strsql) 

end 

if @isrecount != 0 

begin 

set @strsql = 'select count(*) as total from [' + @tblname + ']'+' where ' + @strwhere 

exec (@strsql) 

end

使用方法:

exec dbo.up_getrecordbypage @tblname = 『username』, -- varchar(255) 

@fldname = 'id', -- varchar(255) 

@pagesize = 2, -- int 

@pageindex = 1, -- int 

@isrecount = 0, -- bit 

@ordertype = 1, -- bit 

@strwhere = 'age=13' -- varchar(1000)

如果**有不正確的地方,歡迎批評指正,共同進步。

條件複雜的sql語句查詢

有三張表 分別為 會員表 member 銷售表 sale 退貨表 regoods 會員表有字段 memberid 會員id,主鍵 credits 積分 銷售表有字段 memberid 會員id 外來鍵 購買金額 mnaccount 退貨表中有字段memberid 會員id 外來鍵 退貨金額 rmna...

sql查詢語句查詢條件欄位的拼裝

當我們在查詢資料庫中的資訊時 很多時候需要根據使用者輸入的條件進行查詢 有些條件是有的 可有些條件沒有 這就需要進行組裝條件語句了。下面這種方法就是根據這種情況進行編寫的,希望對看官有所幫助 string sql select from table where where後1 個空格 stringb...

通用的sql語句

insert into 表名稱 values 值1,值2,我們也可以指定所要插入資料的列 insert into table name 列1,列2,values 值1,值2,sql select 語句 select 語句用於從表中選取資料。結果被儲存在乙個結果表中 稱為結果集 sql select ...