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

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

  不多说了直接上代码。

  

GO
IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE')>0
DROP PROC SP_PAGE
GO
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=1
BEGIN
SET @descStr='desc';
END
ELSE
BEGIN
SET @descStr='asc';
END
SET @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>0
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
COMMIT TRANSACTION;
END;
END

  

Sql Service存储过程分页的更多相关文章

  1. 我的sql数据库存储过程分页- -

    以前用到数据库存储过程分页的时候都是用 not in 但是最近工作的时候,随着数据库记录的不断增大,发现not in的效率 真的不行 虽然都设置了索引,但是当记录达到10w的时候就发现不行了,都是需要 ...

  2. SQL Server 存储过程 分页查询

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  3. sql 高性能存储过程分页

    USE [Lyjjr] GO /****** Object: StoredProcedure [dbo].[P_ViewPage] Script Date: 05/29/2015 17:18:56 * ...

  4. SQL Server 存储过程分页

    每每面试,总会有公司问到分页.在下不才,在这里写几种分页,望路过的各位大神尽情拍砖. 先从创建数据库说起.源码如下 一.创建数据库 /********************************* ...

  5. sql server存储过程分页,行变列

    CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]@Index varchar(20),--表主键@Table varchar( ...

  6. sql server存储过程分页

    Create PROCEDURE [dbo].[Table_GetList] ) = '', -- 查询条件(注意: 不要加 WHERE) ) = '', -- 设置排序 , -- 页尺寸 , -- ...

  7. Sql Service 存储过程、触发器

    if exists (select * from sysobjects where name='tb_admin') drop table tb_admin go create table tb_ad ...

  8. SQL Server 存储过程分页。

     create proc proc_Product@page int, -- 页数@row int --  一页有几行Asdeclare @newpage int  set @newpage = (@ ...

  9. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

随机推荐

  1. curl+个人证书(又叫客户端证书)访问https站点

    摘自http://blog.csdn.net/chary8088/article/details/22990741 curl+个人证书(又叫客户端证书)访问https站点 目前,大公司的OA管理系统( ...

  2. 使用 fastlane 实现 iOS 持续集成(转)

    http://www.cocoachina.com/ios/20150916/13433.html 简介 持续集成是个“一次配置长期受益”的工作.但很多小公司都没有.以前在做Windows开发配置感觉 ...

  3. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  4. Vbox 未指定XXX网络名称 找不到网卡问题

    链接方式不止Host-Only 我一般选桥连 选择 VBoxNetFltM.inf VBoxNetFltM.inf VirtualBox的桥接网络驱动程序的INF文件(Miniport:端口) VBo ...

  5. 实现DataGridView和DevExpress.GridControl表头全选功能

    1)DevExpress控件的GridView的实现多选操作 先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作.重新绘制表头等操作,首先在加载第一步实现相关的 ...

  6. HTML 4.01 符号实体

    HTML 4.01 符号实体 http://www.w3school.com.cn/tags/html_ref_symbols.html

  7. Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)

    在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...

  8. sqlserver 2008 局域网跨服务器T-SQL操作(二)

    --判断是否开启远程操作服务,如果关闭,则开启,用完之后关闭 DECLARE @value SQL_VARIANT SELECT @value=VALUE from sys.configuration ...

  9. Javascript 常用代码总结

    1. document.referrer可以获得上一页的地址,使用document.anchors获得页面上面所有的链接元素,而不必使用 document.getElementsByTagName(' ...

  10. windows下如何使用ssh远程登录Linux

    1.ssh的安装 sudo apt-get install ssh 或者在Linux情况下,自带有ssh,从第二步开始   2.生成密钥 ssh-keygen 中间过程会提示你存放密钥的地方Enter ...