zoukankan      html  css  js  c++  java
  • Sql Service存储过程分页

      一起是用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
    

      

  • 相关阅读:
    [C#] 等待启动的进程执行完毕
    C# 、winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示
    Mysql 备份
    Mysql 慢查询日志配置
    Mysql 忘记密码处理配置
    PHP-FPM 慢执行日志、网站隔离配置
    PHP-FPM 设置多pool、配置文件重写
    Nginx 代理配置
    Nginx 301与302配置
    Nginx URL跳转
  • 原文地址:https://www.cnblogs.com/changeMe/p/4494602.html
Copyright © 2011-2022 走看看