• SQL 存储过程入门(五)


          好久没来博客园留下点东西,忙到找工作,最近把工作落实了。

          最近公司的业务都是存储过程开发,发现去维护起来相当困难。

          由于是维护项目,产品很久前都发布了,然而有一些修改,让我们去修改现在的逻辑,去看懂人家的逻辑是件痛苦的事情,况且对整个业务基本不了解,表的字段啊,

          表之间的联系,都是云里雾里。然而,把业务逻辑写在存储过程里面,随便一个存储过程都是千儿八百行,表示很无奈。 

       

          这里就个人对存储过程的看法而言,

        1,在存储过程写业务,不是合理的途径。

        2,在SQL中写的SP,换到Oracle ,MySql中,都无法使用,移植性差。

        3,调试虽然可以使用查询分析器,发现还是不好调试。

       当然优点一大堆,什么效率高啊,速度快啊,安全性高啊,对于复杂计算确实是很方便,毕竟在c#算法中需要若干个sql语句,

     在存储过程中就可以一步到位,这里就不多说了。

       

       其实存储过程语法是很简单的,定义Declare,变量类型也就那些常用的varchar ,char ,int,bigint, 条件判断IF Else, While .里面是没有FOR循环这个概念的。

      当然是用while循环已经非常足够了。

       

      还有就是使用SQL中的系统函数,这个是相当方便

      举个简单例子,如果要查询时间间隔等于好多的,或者是等于当前时间的,用过的都知道,时间有年月日时分秒毫秒,所以要等起来的话还是需要转换的,

    比如用Convert(....)之类的,用系统函数方便多了,

    Datediff()函数,获取时间差,


    DATEDIFF ( datepart , startdate , enddate )

    datepart

    是指定所跨边界类型的 startdate 和 enddate 的一部分。 下表列出了所有有效的 datepart 参数。 用户定义的变量等效项是无效的。

     

    datepart

    缩写

    year

    yy, yyyy

    quarter

    qq, q

    month

    mm, m

    dayofyear

    dy, y

    day

    dd, d

    week

    wk, ww

    hour

    hh

    minute

    mi, n

    second

    ss, s

    millisecond

    ms

    microsecond

    mcs

    nanosecond

    ns

           startdate

    是一个可以解析为 timedatesmalldatetimedatetimedatetime2 或 datetimeoffset 值的表达式。 date 可以是表达式、列表达式、用户定义的变量或字符串文字。 从 enddate 中减去 startdate

    为避免不确定性,请使用四位数年份。 有关两位数年份的信息,请参阅配置两位数年份截止服务器配置选项

    enddate

    请参阅 startdate

     1 SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
     2 
     3 -----
     4 DiffDate
     5      1
     6 
     7 SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
     8 
     9 
    10 
    11  ------
    12 DiffDate
    13     -1

    
    

    DAY()MONTH()YEAR()函数

    这三个函数分别返回以整数表示的datetime或者smalldatetime类型值的日、月、年。它们的用途很广泛,如可以创建独特的个性化日期格式。假设需要创建一个自定义的日期值作为字符串,通过将这三个函数的输出结果转换成字符类型,然后进行连接操作,就可以对输出结果以任何形式进行组合了:

      SELECT 'Year: ' + CONVERT(varchar(4), YEAR(GETDATE()))  
    
        + ', Month: ' + CONVERT(varchar(2), MONTH(GETDATE()))  
    
        + ', Day: ' + CONVERT(varchar(2), DAY(GETDATE()))

    The result:

    Year: 2013, Month: 8, Day: 28

       系统函数很多,具体的可以去查看MSDN,这个还真的好用。

       所以,个人觉得存储过程比较实用的地方:

    1,报表中,实用存储过程方便。

    2,系统中复杂的运算,可以使用,否则在代码中需要若干计算,多次连接数据库,这样很消耗性能。

       关于存储过程的所有文章基本就说到这了,希望能帮助正在学习的人,祝看博客的人天天有个好心情哈!

      如果您有任何关于存储过程的问题和不同见解,欢迎留下你的足迹。

  • 相关阅读:
    Django orm self 自关联表
    postgresql数据库导入导出
    celery在项目中的使用
    P3405 [USACO16DEC]Cities and States S 【map使用】
    P1030 求先序排列 【已知中序后序求先序】
    P1305 新二叉树 【寻找根节点进行先序遍历】
    P1229 遍历问题 【已知先序后序求中序种类】
    P1364 医院设置 【带权值的树的重心】
    P3884 [JLOI2009]二叉树问题 【离线tarjan或数的向上遍历】
    P1827 [USACO3.4]美国血统 American Heritage【树的遍历】
  • 原文地址:https://www.cnblogs.com/lideng/p/3168513.html
Copyright © 2020-2023  润新知