假設資料庫中有張表,表名是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 ...