SQL Service 分页存储过程

USE [Logistics]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[PROC_GetDriverPagedList]
(
    @Name nvarchar(32),
    @Sex char(2),
    @BirthStart varchar(32),
    @BirthEnd varchar(32),
    @PageIndex int,
    @PageSize int,
    @TotalCount int output
)
as 
declare @StrSql nvarchar(1024)--定义动态SQL语句
declare @StrWhere nvarchar(1024)--定义多条件查询的and 语句
declare @PageCount int--定义总页数

set @StrWhere=''--为多条件查询的and语句赋值为''字符串

if @Name<>'' and @Name is not null
begin
    set @StrWhere=@StrWhere+' and d.Name='''+@Name+''''
end

if @Sex<>'' and @Sex is not null
begin
    set @StrWhere=@StrWhere+' and d.Sex='''+@Sex+''''
end

if @BirthStart<>'' and @BirthStart is not null
begin
    set @StrWhere=@StrWhere+' and d.Birth>='''+@BirthStart+''''
end

if @BirthEnd<>'' and @BirthEnd is not null
begin
    set @StrWhere=@StrWhere+' and d.Birth<'''+@BirthEnd+''''
end

print @StrWhere

--计算当前数据的总记录数
set @StrSql='select @TotalCount=count(*) from Driver as d where IsDelete=0'+@StrWhere

--执行SQL计算出总的记录数
exec sp_executesql @StrSql ,N'@TotalCount int output',@TotalCount output

--边界值判断
if @PageIndex<1
begin
    set @PageIndex=1
end

--计算出来总页数
set @PageCount= CEILING(CONVERT(float, @TotalCount)/@PageSize)

if @PageIndex>@PageCount
begin
    set @PageIndex=@PageCount
end

set @StrSql=N'select * from 
(
select ROW_NUMBER() over(order by DriverID) as RowIndex, d.DriverID, d.Name,d.Sex,d.Phone,d.Birth,tt.TeamName,d.IDCard,d.CheckInTime,t.Number from Driver as d left join Contact as c on d.DriverID=c.FK_DriverID
left join Truck as t on t.TruckID = c.FK_TruckID
left join TruckTeam as tt on tt.TeamID = d.FK_TeamID where d.IsDelete=0 '+@StrWhere+'
)as temp where temp.RowIndex between '+convert(varchar(16), (((@PageIndex-1)*@PageSize)+1))+' and '+convert( varchar(16),(@PageIndex*@PageSize))

exec sp_executesql @StrSql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值