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存储过程传入表名做参数,进行分页处理

存储过程: DROP PROCEDURE IF EXISTS `pagePro`; CREATE DEFINER = `root`@`localhost` PROCEDURE `pagePro...
  • lxpaopao
  • lxpaopao
  • 2017-05-17 13:50:02
  • 492

Jquery Easyui插件Datagrid获取后台mssql数据通过存储过程高效分页来获取

前台Html-------Easyui Datagrid    
  • myredhatlinux
  • myredhatlinux
  • 2010-12-04 11:40:00
  • 3309

DB2 根据表名查找存储过程

–根据表名查找存储过程(不加模式名) SELECT PROCSCHEMA, –模式名 PROCNAME –存储过程名 FROM SYSCAT.PROCEDURES W...
  • lyh03601
  • lyh03601
  • 2017-10-07 22:02:36
  • 762

存储过程动态表名

create or replace procedure BXSP_DATA_QB(                startDate in varchar2,                --开...
  • qq_27646361
  • qq_27646361
  • 2017-08-08 10:15:23
  • 169

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

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

sqlServer分页存储过程的调用

现象: sqlServer的分页一直相对比较复杂。这里使用存储过程实现分页逻辑解决办法 1:action获取查询的条件,初始化每页显示的大小,page代表当前查看第几页,默认设置为第一页。rows...
  • hcwbr123
  • hcwbr123
  • 2017-04-28 11:39:06
  • 710

mysql 存储过程 动态表名

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

分页存储过程,带表名,分页字段、

  • 2010年05月28日 15:12
  • 2KB
  • 下载

解决 mysql 存储过程查询数据方式是变量拼接表名的写法

需求: 用存储过程查询动态表名的数据 遇到问题: 查询语句 from后面不能直接用参数查询 MYSQL不支持直接使用变量做表名,会把参数名当做表名查询,报错 解决方法: ...
  • Alice_qixin
  • Alice_qixin
  • 2017-05-12 14:50:31
  • 556

thinkphp调用sql存储过程

$strDbUser = '用户名'; $strDbPass = '数据库密码'; $strDbHost = '主机地址'; $strDbName...
  • github_39437588
  • github_39437588
  • 2017-09-29 10:13:34
  • 611
收藏助手
不良信息举报
您举报文章:MSSQL根据表名动态分页的存储过程以及C#.net调用使用
举报原因:
原因补充:

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