zoukankan      html  css  js  c++  java
  • 浅谈SQL Server所实现创建分页功能的存储过程的分析及代码

    1 SQL Server分页说明

      在这里我们能看到一种使用sql存储过程写的数据控件分页功能,不管给开发工具中的那个数据控件,都只要调用这个存储过程就可以实现这样的方法了,简单吧,我们再也不用在各个页面都写很多的SQL语句了。Misrosoft  SQL Server是微软开发的一种管理数据的数据库,现在世面上面最流行的几款数据库是Access,SQL Server, MySQl,Oracl数据库,所谓这些数据库,只要你学会一个数据库的语法等,其他的你都就大致会使用了,现在就我学习的SQL Server我在这里大致写写, 我们已经学习了一年了,我们学到了什么呢?我自我问了一下,我发现我真的什么都没有学到。除了写个创建表啊,执行简单的Sql语句,写简单的存储过程,我们写过函数吗?写过SQL的一些高级的东西吗?就是简单的存储过程,都是我们自己随手写出来的吗,还要查资料,要是真正自己写呢,我就不能说了?????????,所以我们学习的东西还有很多呢,我们要坚持,坚持就是胜利。

    2 SQL Server存储过程分页

      下面就是支持数据分页的存储过程,值得研究一下,当然,我们要认真的看,才能从中学到好多东西哦。

      创建存储过程:  

     1 --获取分页的总共数据的信息
     2 
     3 create procedure p_PageList
     4 
     5 (
     6 
     7 @TableName nvarchar(300),  --你所要分页的表名
     8 
     9 @PKey nvarchar(50),        --主键 默认ID
    10 
    11 @FieldList nvarchar(500),  --需要搜索的字段
    12 
    13 @Condition nvarchar(1000), --条件,搜索什么条件
    14 
    15 @OrderBy nvarchar(250),    --排序Order By ID
    16 
    17 @Sql nvarchar(1000),       --可以使用,也可以不使用,程序可以自动生成sql语句,当然,那样只能简单的查出来所需要的信息
    18 
    19 @SqlGetRC nvarchar(1000),  --得到总的sql语句,也可以不使用,也可以指定
    20 
    21 @CurrPage int,             --当前你所查看的那一页
    22 
    23 @PageSize int,             --每页所要现实的数目
    24 
    25 @RecordCount int,          --获取数据库中数据的总数目,可以传,也可以不传
    26 
    27 @result int output         --输出参数
    28 
    29 )
    30 
    31 as
    32 
    33 declare @PageCount int
    34 
    35 if @SqlGetRC=''  --如果总的数据sql语句为空
    36 
    37 Set @SqlGetRC='Select @RecordCount=COUNT(0) FROM '+@TableName+@Condition
    38 
    39 if @RecordCount=-1  --
    40 
    41 begin
    42 
    43 exec sp_executesql @SqlGetRC,N'@RecordCount int out',@RecordCount out
    44 
    45 end
    46 
    47 Set @PageCount=(@RecordCount+@PageSize-1)/@PageSize
    48 
    49 if @CurrPage>@PageCount AND @PageCount>0
    50 
    51 Set @CurrPage=@PageCount
    52 
    53  
    54 
    55 if @Sql=''
    56 
    57 begin
    58 
    59     if @PageSize=0
    60 
    61        set @PageSize=10
    62 
    63     if @CurrPage=1
    64 
    65        Set @Sql='select top '+Cast(@PageSize as nvarchar)+' '+@FieldList+' FROM '+@TableName+@Condition+' '+@OrderBy
    66 
    67     else
    68 
    69        Set @Sql='select top '+Cast(@PageSize as nvarchar)+' '+@FieldList+' FROM '+@TableName+' WHERE ' +@Pkey+' NOT IN (SELECT TOP '+Cast((@CurrPage-1)*@PageSize as nvarchar)+' '+@Pkey+' FROM '++ ' ' + @Condition + ' ' + @OrderBy + ') ' + replace(@Condition,' WHERE 1=1',' ') + ' ' + @OrderBy
    70 
    71 end
    72 
    73 exec(@Sql)
    74 
    75 Select RecordCount=@RecordCount,PageCount=@PageCount
    76 
    77 Set  @Result=1

    3 知识点总结

      1:sp_executesql  执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

        备注:在批处理、名称作用域和数据库上下文方面,sp_executesql 与 EXECUTE 的行为相同。sp_executesql stmt 参数中的 Transact-SQL 语句或批处理在执行 sp_executesql 语句时才编译。随后,将编译 stmt 中的内容,并将其作为执行计划运行。该执行计划独立于名为 sp_executesql 的批处理的执行计划。sp_executesql 批处理不能引用调用 sp_executesql 的批处理中声明的变量。sp_executesql 批处理中的本地游标或变量对调用 sp_executesql 的批处理是不可见的。对数据库上下文所作的更改只在 sp_executesql 语句结束前有效。

        如果只更改了语句中的参数值,则 sp_executesql 可用来代替存储过程多次执行 Transact-SQL 语句。因为 Transact-SQL 语句本身保持不变,仅参数值发生变化,所以 SQL Server 查询优化器可能重复使用首次执行时所生成的执行计划。

      2:Cast  将一种数据类型的表达式显式转换为另一种数据类型的表达式。CAST 和 CONVERT 提供相似的功能。

      3:replace 将第一个字符串表达式中第二个给定字符串表达式的所有实例都替换为第三个表达式。

        语法:REPLACE ( 'string_expression1' , 'string_expression2' ,'string_expression3' )

        ' string_expression1 ':要搜索的字符串表达式。string_expression1 参数的数据类型可以是可隐式转换为 nvarchar ntext 的数据类型。

        ' string_expression2 ':尝试查找的字符串表达式。string_expression2 参数的数据类型可以是可隐式转换为 nvarchar ntext 的数据类型。

        ' string_expression3 ':替换字符串表达式。string_expression3 参数的数据类型可以是可隐式转换为 nvarchar ntext 的数据类型。

      返回值

        nvarcharntext  如果任意参数为 NULL,则返回 NULL。

      示例

        下面的示例在产品名称列表中搜索名称“Anton”并将其替换为“Anthony”:SELECT REPLACE(ProductName, 'Anton', 'Anthony')FROM Products

    初心商城:初心商城

    作者:韩迎龙(Kencery)    MVC/.NET群:159227188
    如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利

  • 相关阅读:
    WCF 订单服务(2)
    移动应用接口的授权和安全
    数据库服务器死锁的解决方法 (转)
    WCF 订单服务(3)
    sqlservice 表分区方法
    基于.NET解决方案的架构和框架
    IIS7架构原理
    多线程的同步和通信
    【原创】关于wince OS开发面试问题的总结系列之OAL
    【原创】关于noot的学习笔记
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2281599.html
Copyright © 2011-2022 走看看