ALTER PROCEDURE [dbo].[proc_Hotel_Pagedata]
@pageSize int,
@pageCurrent int,
@province varchar(20),
@city varchar(20),
@brandId varchar(20)
AS
declare @sql nvarchar(4000)
BEGIN
select * from
(select ROW_NUMBER() over(ORDER BY hotelId) RowNum, * from nbapisdk_Hotel where
province = (CASE WHEN (@province IS NULL) THEN province ELSE @province END)
and city = (CASE WHEN (@city IS NULL) THEN city ELSE @city END)
and brandId = (CASE WHEN (@brandId IS NULL) THEN brandId ELSE @brandId END)
)OrderData
where RowNum between (@pageCurrent - 1)*@pageSize + 1 and @pageCurrent * @pageSize order by hotelId
execute(@sql)
END
上面是正常的SQL语句,下面是拼接的分页存储过程
ALTER PROCEDURE [dbo].[proc_tourol_B2COrder_Pagedata]
@pageSize int,
@pageIndex int,
@count int out,
@sqlwhere nvarchar(200)
AS
declare @sql nvarchar(4000)
declare @sql2 nvarchar(4000)
BEGIN
set @sql=
'select * from
(select ROW_NUMBER() over(ORDER BY Orderid) RowNum, * from tourol_B2COrder '+@sqlwhere+'
)OrderData
where RowNum between '+CONVERT(nvarchar(100),@pageIndex)+'*'+CONVERT(nvarchar(100),@pageSize)
+' + 1 and ('+CONVERT(nvarchar(100),@pageIndex)+'+1) * '+CONVERT(nvarchar(100),@pageSize)
+' order by Orderid'
print @sql
exec (@sql)
set @sql2=
'select @count=count(*) from
(select ROW_NUMBER() over(ORDER BY Orderid) RowNum, * from tourol_B2COrder '+@sqlwhere+'
)OrderData'
print @sql2
exec sp_executesql @sql2,N'@count INT OUT',@count=@count OUT
print @count
END
这里需要注意的是传出参数的写法
作者:石世特
出处:http://www.cnblogs.com/TivonStone/
希望本文对你有所帮助,想转随便转,心情好的话给我的文章留个链接.o(. .)o
浙公网安备 33010602011771号