Sql Service存储过程分页

王朝学院·作者佚名  2016-05-25
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Sql Service存储过程分页一起是用Oracle数据库。。感觉oracle数据库强大、查询速度是杠杠的。换了家公司用的是SQL SERVICE。以前用了1年现在捡回以前的记忆。动手写了动态SQL过存储过程分页。感觉和oracle语法不太一样外。其他感觉没啥区别。。

这个是通用存储过程。但是有一个问题我没解决就是条件怎么通用写。我条件都是拼接字符串感觉很不安全。不晓得博友门有木有什么解决方案

不多说了直接上代码。

GOIF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE')>0DROP PROC SP_PAGEGO CREATE PROC SP_PAGE(@tbName VARCHAR(50),@Condition NVARCHAR(1000),@SortColumn VARCHAR(100), @isDesc INT,@thisPage INT,@PageRowNumber INT,@sumPage INT OUT) AS BEGIN BEGIN TRANSACTION DECLARE @exeSql NVARCHAR(1000) ; DECLARE @sumRowNumber INT,@descStr NVARCHAR(10); SET @exeSql='select @sumRowNumber=count(*) from '+@tbName+' '+@Condition; --执行动态SQL获取值EXEC sp_executesql @exeSql, N'@sumRowNumber int out',@sumRowNumber OUT;--计算总页数SET @sumPage=(@sumRowNumber-1)/@PageRowNumber+1;--计算分页行DECLARE @BeginRow INT,@EndRow INT;SET @BeginRow=(@thisPage-1)*@PageRowNumber+1;SET @EndRow=@thisPage*@PageRowNumber;--计算排序IF @isDesc=1BEGINSET @descStr='desc';ENDELSEBEGINSET@descStr='asc';ENDSET @exeSql='select * from (select a.*,ROW_NUMBER() OVER(order by '+@SortColumn+' '+@descStr+ ') as rowIndex from '+@tbName+' a '+@Condition+') a where a.rowIndex BETWEEN '+CONVERT(VARCHAR(10),@BeginRow)+' AND '+CONVERT(VARCHAR(10),@EndRow)+'';EXEC(@exeSql);--事物提交还是回滚if @@ERROR>0BEGINROLLBACK TRANSACTION;ENDELSEBEGINCOMMIT TRANSACTION;END; END

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航