MSSQL根据表名动态分页的存储过程以及C#.net调用使用

原创 2012年11月16日 20:15:22

2012-07-06 19:44

MSSQL根据表名进行动态分页的sql存储过程:

该存储过程中操作的表需要设置主键,否则分页出错....


 


--动态按表名分页--
alter proc ShowPageByTable
 @tableName varchar(40),
 @pageIndex int=1 ,
 @pageSize int=10,
 @pageCount int =0 output
as
begin
--声明起始和结束的行号
 declare @start int, @end int,@pkey varchar(20)
 --创建临时表存储传入的主键
 create table #temp 
  ( 
  tab_qu varchar(20),owenr varchar(20),tablename varchar(20),
  cname varchar(20),keys int,pname varchar(20)
  )
  insert #temp
  exec sp_pkeys @tablename --获取该表主键的的系统存储过程
  select @pkey=cname from #temp --设置主键

    --设置起始和结束坐标
 set @start=(@pageIndex-1 )*@pageSize +1 
set @end =@pageIndex * @pageSize
 
--动态执行SQL语句,查询所需数据(如果该查询语句有需要其他约束,则需要传入其他约束条件)
    exec('
  select ROW_NUMBER() over(order by '+@pkey+') as RowID,*  into #OrderTemp 
  from ' + @tableName +' 
     select * from #OrderTemp
 where RowID between ' +@start + ' and '+ @end)
 
--执行一次全表查询,判断分页的总页数
 exec('select * into #ss from '+@tableName)
 set @pageCount= @@ROWCOUNT/@pageSize
 
if(@@ROWCOUNT%@pageSize!=0)
  set @pageCount=@pageCount+1
 end   


 

C#调用代码:


  /// <summary>
        /// 根据表名分页,不获取分页的总页数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页显示行数</param>
        /// <returns>该页的数据集</returns>
        public static DataSet GetDataByNamePage(string tablename, int pageIndex,int pageSize)
        {
            DataSet ds = new DataSet();
            using (sqlconn)
            {
                int count=0;
                ds= GetDataByNamePage(tablename, pageIndex, pageSize, out count);
            }
            return ds;
 
        }
        /// <summary>
        /// 根据表名分页,包含输出参数总页数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页显示行数</param>
        /// <param name="pagetCount">输出参数:分页的总页数</param>
        /// <returns>该页的数据集</returns>
        public static DataSet GetDataByNamePage(string tablename, int pageIndex, int pageSize,out int pagetCount)
        {
            DataSet ds = new DataSet();
            using (sqlconn)
            {
                sqlconn = new SqlConnection(connstr);
                sqlconn.Open();
                SqlDataAdapter sda = new SqlDataAdapter("ShowPageByTable", sqlconn);
                sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                sda.SelectCommand.Parameters.AddWithValue("@tableName", tablename);
                sda.SelectCommand.Parameters.AddWithValue("@pageIndex", pageIndex);
                sda.SelectCommand.Parameters.AddWithValue("@pageSize", pageSize);
                sda.SelectCommand.Parameters.Add("@pageCount", SqlDbType.Int);
                sda.SelectCommand.Parameters["@pageCount"].Direction = ParameterDirection.Output;

                if (ds.Tables[tablename] != null)
                    ds.Tables[tablename].Clear();
                sda.Fill(ds, tablename);

                pagetCount = (int)sda.SelectCommand.Parameters["@pageCount"].Value;
            }
            return ds;

        }

 


 

mysql 存储过程 动态表名

今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了。 集众人之智慧,最后,使用临时表解...
  • wuwei19871020
  • wuwei19871020
  • 2014年12月10日 10:16
  • 2344

关于mysql存储过程创建动态表名及参数处理

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)  最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线...
  • ycg514230
  • ycg514230
  • 2014年11月16日 20:36
  • 5801

SQLServer千万数量级分页公共存储过程

转自:http://blog.csdn.net/tem168/article/details/6427123 SQLServer千万数量级分页公共存储过程   通用的数据库分页存...
  • chelen_jak
  • chelen_jak
  • 2014年12月11日 21:24
  • 3094

java调用存储过程实现分页功能

创建程序包: SQL> create or replace package mypack 2 as 3 type emp_cursor is ref cursor; 4 end m...
  • xingzhemoluo
  • xingzhemoluo
  • 2014年09月17日 20:10
  • 910

PHP使用PDO调用sqlserver存储过程记录【分享个通用方法】

由于业务这边存储过程一直在sqlserver上面,所以要用php去调用它,然而我们本地的是windows,而线上又是linux,一开始使用Yii框架的一些机制去调用发现在本地一直都是好的然而到线上就不...
  • u012655332
  • u012655332
  • 2017年06月21日 08:45
  • 730

通用分页存储过程的使用

看着同事写的通用分页存储过程觉得还不错,分享给大家 1、存储过程 USE [test] GO /****** Object:  StoredProcedure [dbo]....
  • f10_s
  • f10_s
  • 2013年09月10日 16:35
  • 1340

什么时候用存储过程+分页例子

存储过程一般用于处理比较复杂的任务,基础ms这个平台,可以大大降低耗时,其编译机制也提高了数据库执行速度。 当然在系统控制方便方面,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更...
  • cc41798520101
  • cc41798520101
  • 2016年08月02日 16:00
  • 914

按日期保存数据的sql server动态存储过程

  • yibingde
  • yibingde
  • 2014年08月16日 12:44
  • 616

mysql中存储过程 解决参数作为表名

关键字: mysql 存储过程 1.用变量做表名:  简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。在其他的sql数据库中也...
  • superbfly
  • superbfly
  • 2013年10月16日 10:32
  • 3553

数据库分页存储过程,支持多表联合查询

数据库分页存储过程,支持多表联合查询 CREATE PROCEDURE [dbo].[getInQuiryAllByPage] @tableNames varchar(5000), --表...
  • gaoxu529
  • gaoxu529
  • 2015年05月21日 16:07
  • 1438
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSSQL根据表名动态分页的存储过程以及C#.net调用使用
举报原因:
原因补充:

(最多只允许输入30个字)