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

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

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

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

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

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

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

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

enddate

请参阅 startdate。

 SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

 -----
DiffDate
1 SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate ------
DiffDate
-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,系统中复杂的运算,可以使用,否则在代码中需要若干计算,多次连接数据库,这样很消耗性能。

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

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

SQL 存储过程入门(五)的更多相关文章

  1. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  2. SQL 存储过程入门(事务)

    本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果 ...

  3. SQL总结(五)存储过程

    SQL总结(五)存储过程 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure pro ...

  4. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  5. openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  6. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  7. SQL 存储过程(学生,课程表,选修表)

    SQL 存储过程(学生,课程表,选修表) 一.存储过程的分类 在SQL Server中存储过程分过两类: 1)系统存储过程("sp_"作为前缀) 2)用户自定义存储过程 二.创建和 ...

  8. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  9. MySQL存储过程入门

    MySQL存储过程入门 在本教程中,我们将逐步介绍如何使用CREATE PROCEDURE语句开发第一个MySQL存储过程. 另外,我们将向您展示如何从SQL语句调用存储过程. 编写第一个MySQL存 ...

随机推荐

  1. 『科学计算』图像检测微型demo

    这里是课上老师给出的一个示例程序,演示图像检测的过程,本来以为是传统的滑窗检测,但实际上引入了selectivesearch来选择候选窗,所以看思路应该是RCNN的范畴,蛮有意思的,由于老师的注释写的 ...

  2. 管道pipe与dup结合使用,应用实例

    管道的一种常见用法:在父进程创建子进程后向子进程传递参数.例如,一个应用软件有一个主进程和很多个不同子进程. 主进程创建子进程后,在子进程调用exec函数执行一个新程序前,通过管道给即将执行的程序传递 ...

  3. 下拉选择框 Spinner的用法。

    代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...

  4. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  5. ue使用

    快捷键CTRL+V:输入代码提示自动补全 编辑器Ultraedit快捷键    说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开 ...

  6. poshytip漂亮的表单提示插件

    一款很实用的小插件,在表单的输入框会显示提示信息,你可能会用的它. 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  7. Maven私服Nexus详解

    maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:2.1 中央仓库 2.2 私服 2.3 其它公共库. 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理 ...

  8. LSTM神经网络

    LSTM是什么 LSTM即Long Short Memory Network,长短时记忆网络.它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的. 我们说RNN不能处 ...

  9. [转]一种让超大banner图片不拉伸、全屏宽、居中显示的方法

    现在很多网站的Banner图片都是全屏宽度的,这样的网站看起来显得很大气.这种Banner一般都是做一张很大的图片,然后在不同分辨率下都是显示图片的中间部分.实现方法如下: <html> ...

  10. buy now按钮的添加

    样例是 www.dealfreeship.com:在D:\xampp\htdocs\aliexpress\app\design\frontend\default\se101\template\cata ...